2
0

BaseTheme.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using MediaBrowser.Common.Mef;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel.Composition;
  5. using System.ComponentModel.Composition.Hosting;
  6. using System.ComponentModel.Composition.Primitives;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. namespace MediaBrowser.Common.Plugins
  10. {
  11. public abstract class BaseTheme : BasePlugin
  12. {
  13. public sealed override bool DownloadToUi
  14. {
  15. get
  16. {
  17. return true;
  18. }
  19. }
  20. /// <summary>
  21. /// Gets the MEF CompositionContainer
  22. /// </summary>
  23. private CompositionContainer CompositionContainer { get; set; }
  24. /// <summary>
  25. /// Gets the list of global resources
  26. /// </summary>
  27. [ImportMany(typeof(ResourceDictionary))]
  28. public IEnumerable<ResourceDictionary> GlobalResources { get; private set; }
  29. /// <summary>
  30. /// Gets the list of pages
  31. /// </summary>
  32. [ImportMany(typeof(Page))]
  33. public IEnumerable<Page> Pages { get; private set; }
  34. /// <summary>
  35. /// Gets the pack Uri of the Login page
  36. /// </summary>
  37. public abstract Uri LoginPageUri { get; }
  38. protected override void InitializeInUi()
  39. {
  40. base.InitializeInUi();
  41. ComposeParts();
  42. }
  43. private void ComposeParts()
  44. {
  45. var catalog = new AssemblyCatalog(GetType().Assembly);
  46. CompositionContainer = MefUtils.GetSafeCompositionContainer(new ComposablePartCatalog[] { catalog });
  47. CompositionContainer.ComposeParts(this);
  48. CompositionContainer.Catalog.Dispose();
  49. }
  50. protected override void DisposeInUi()
  51. {
  52. base.DisposeInUi();
  53. CompositionContainer.Dispose();
  54. }
  55. protected Uri GeneratePackUri(string relativePath)
  56. {
  57. string assemblyName = GetType().Assembly.GetName().Name;
  58. string uri = string.Format("pack://application:,,,/{0};component/{1}", assemblyName, relativePath);
  59. return new Uri(uri, UriKind.Absolute);
  60. }
  61. }
  62. }