/// <summary> /// This method can be used to initialize the global container used by <see cref="CompositionInitializer.SatisfyImports(object)"/> /// in case where the default container doesn't provide enough flexibility. /// /// If this method is needed it should be called exactly once and as early as possible in the application host. It will need /// to be called before the first call to <see cref="CompositionInitializer.SatisfyImports(object)"/> /// </summary> /// <param name="catalogs"> /// An array of <see cref="ComposablePartCatalog"/> that should be used to initialize the <see cref="CompositionContainer"/> with. /// </param> /// <exception cref="ArgumentNullException"> /// <paramref name="catalogs"/> is <see langword="null"/>. /// </exception> /// <exception cref="InvalidOperationException"> /// Either <see cref="Initialize(CompositionContainer)" /> or <see cref="Initialize(ComposablePartCatalog[])" />has already been called or someone has already made use of the global /// container via <see cref="CompositionInitializer.SatisfyImports(object)"/>. In either case you need to ensure that it /// is called only once and that it is called early in the application host startup code. /// </exception> public static CompositionContainer Initialize(params ComposablePartCatalog[] catalogs) { AggregateCatalog aggregateCatalog = new AggregateCatalog(catalogs); CompositionContainer container = new CompositionContainer(aggregateCatalog); try { CompositionHost.Initialize(container); } catch { container.Dispose(); // NOTE : this is important, as this prevents the disposal of the catalogs passed as input arguments aggregateCatalog.Catalogs.Clear(); aggregateCatalog.Dispose(); throw; } return(container); }
public static void SetupTestGlobalContainer(ComposablePartCatalog catalog) { CompositionHost._container = null; CompositionHost.Initialize(catalog); }
public static void SetupTestGlobalContainer(CompositionContainer container) { CompositionHost._container = null; CompositionHost.Initialize(container); }