using MediaBrowser.Common.Mef; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition.Primitives; using System.Windows; using System.Windows.Controls; namespace MediaBrowser.Common.Plugins { public abstract class BaseTheme : BasePlugin { public sealed override bool DownloadToUi { get { return true; } } /// /// Gets the MEF CompositionContainer /// private CompositionContainer CompositionContainer { get; set; } /// /// Gets the list of global resources /// [ImportMany(typeof(ResourceDictionary))] public IEnumerable GlobalResources { get; private set; } /// /// Gets the list of pages /// [ImportMany(typeof(Page))] public IEnumerable Pages { get; private set; } /// /// Gets the pack Uri of the Login page /// public abstract Uri LoginPageUri { get; } protected override void InitializeInUi() { base.InitializeInUi(); ComposeParts(); } private void ComposeParts() { var catalog = new AssemblyCatalog(GetType().Assembly); CompositionContainer = MefUtils.GetSafeCompositionContainer(new ComposablePartCatalog[] { catalog }); CompositionContainer.ComposeParts(this); CompositionContainer.Catalog.Dispose(); } protected override void DisposeInUi() { base.DisposeInUi(); CompositionContainer.Dispose(); } protected Uri GeneratePackUri(string relativePath) { string assemblyName = GetType().Assembly.GetName().Name; string uri = string.Format("pack://application:,,,/{0};component/{1}", assemblyName, relativePath); return new Uri(uri, UriKind.Absolute); } } }