diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Composition/CompositionManager.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Composition/CompositionManager.cs | 50 |
1 files changed, 16 insertions, 34 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Composition/CompositionManager.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Composition/CompositionManager.cs index cacad176b2..39e3eaaf25 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Composition/CompositionManager.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Composition/CompositionManager.cs @@ -45,10 +45,10 @@ namespace MonoDevelop.Ide.Composition {
/// <summary> /// The host of the MonoDevelop MEF composition. Uses https://github.com/Microsoft/vs-mef. - /// </summary> - public partial class CompositionManager + /// </summary>
+ [DefaultServiceImplementation] + public partial class CompositionManager: Service {
- static Task<CompositionManager> creationTask; static CompositionManager instance; static readonly Resolver StandardResolver = Resolver.DefaultInstance; @@ -56,55 +56,44 @@ namespace MonoDevelop.Ide.Composition new AttributedPartDiscoveryV1 (StandardResolver), new AttributedPartDiscovery (StandardResolver, true)); - public static CompositionManager Instance { + public static CompositionManager Instance {
get {
if (instance == null) {
- var task = InitializeAsync ();
+ var task = Runtime.GetService<CompositionManager> ();
if (!task.IsCompleted && Runtime.IsMainThread) {
LoggingService.LogInfo ("UI thread queried MEF while it was still being built:{0}{1}", Environment.NewLine, Environment.StackTrace);
}
- instance = task.Result;
- } - - return instance; - } + instance = task.WaitAndGetResult ();
+ }
+
+ return instance;
+ }
}
- /// <summary> - /// Starts initializing the MEF composition on a background thread. Thread-safe. - /// </summary> - public static Task<CompositionManager> InitializeAsync () + protected override Task OnInitialize (ServiceProvider serviceProvider) { - if (creationTask == null) { - lock (typeof (CompositionManager)) { - if (creationTask == null) { - creationTask = Task.Run (() => CreateInstanceAsync ()); - } - } - } - - return creationTask; + return Task.Run (async () => await InitializeInstanceAsync ());
} /// <summary> /// Returns an instance of type T that is exported by some composition part. The instance is shared (singleton). /// </summary> - public static T GetExportedValue<T> () => Instance.ExportProvider.GetExportedValue<T> ();
+ public T GetExportedValue<T> () => ExportProvider.GetExportedValue<T> ();
/// <summary>
/// Returns all instances of type T that are exported by some composition part. The instances are shared (singletons).
/// </summary>
- public static IEnumerable<T> GetExportedValues<T> () => Instance.ExportProvider.GetExportedValues<T> (); + public IEnumerable<T> GetExportedValues<T> () => ExportProvider.GetExportedValues<T> (); /// <summary>
/// Returns a lazy holding the instance of type T that is exported by some composition part. The instance is shared (singleton).
/// </summary>
- public static Lazy<T> GetExport<T> () => new Lazy<T> (() => Instance.ExportProvider.GetExportedValue<T> ()); + public static Lazy<T> GetExport<T> () => new Lazy<T> (() => Instance.ExportProvider.GetExportedValue<T> ());
/// <summary>
/// Returns a lazy holding all instances of type T that are exported by some composition part. The instances are shared (singletons).
/// </summary>
- public static Lazy<IEnumerable<T>> GetExports<T> () => new Lazy<IEnumerable<T>> (() => Instance.ExportProvider.GetExportedValues<T> ()); + public static Lazy<IEnumerable<T>> GetExports<T> () => new Lazy<IEnumerable<T>> (() => Instance.ExportProvider.GetExportedValues<T> ());
public RuntimeComposition RuntimeComposition { get; private set; } public IExportProviderFactory ExportProviderFactory { get; private set; } @@ -116,13 +105,6 @@ namespace MonoDevelop.Ide.Composition { } - static async Task<CompositionManager> CreateInstanceAsync () - {
- var compositionManager = new CompositionManager ();
- await compositionManager.InitializeInstanceAsync (); - return compositionManager; - }
-
async Task InitializeInstanceAsync () {
var assemblies = ReadAssembliesFromAddins ();
|