Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.cs50
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 ();