/// <summary> /// Adds the specific export provider to the composer. /// </summary> /// <param name="provider">The export provider add to the composer.</param> /// <param name="postContainerModifier">A modifier action called after the container has been created.</param> public void AddExportProvider(ExportProvider provider, Action <ExportProvider, CompositionContainer> postContainerModifier = null) { if (provider == null) { throw new ArgumentNullException("provider"); } ExportProviders.Add(provider); if (postContainerModifier != null) { postContainerModifiers.Add(provider, postContainerModifier); } }
/// <summary> /// Ensures the Container has been instantiated/re-instantiated if the Composer has been modified. /// </summary> private void EnsureContainer() { if (modified || Container == null) { if (Container != null) { Container.Dispose(); } Container = new CompositionContainer(Catalog, ExportProviders.ToArray()); foreach (var provider in postContainerModifiers.Keys) { postContainerModifiers[provider](provider, Container); } Container.ComposeExportedValue(this); modified = false; } }
private MefContainer() { if (modified || _container == null) { if (_container != null) { _container.Dispose(); } var extensionsFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty; extensionsFolder = Path.Combine(extensionsFolder, "Extensions"); var catalog = new AggregateCatalog( new AssemblyCatalog(Assembly.GetExecutingAssembly()), new AssemblyCatalog(Assembly.GetAssembly(typeof(DatabaseConnection))) ); if (Directory.Exists(extensionsFolder)) { catalog.Catalogs.Add(new DirectoryCatalog(extensionsFolder)); } if (Directory.Exists(extensionsFolder + "/HRM")) { catalog.Catalogs.Add(new DirectoryCatalog(extensionsFolder + "/HRM")); } #if SAMPLE_EXTENSIONS var samples = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty; samples = Path.Combine(samples, "OpenCBS.Extensions.Samples.dll"); if (File.Exists(samples)) { catalog.Catalogs.Add(new AssemblyCatalog(samples)); } #endif _container = new CompositionContainer(catalog, ExportProviders.ToArray()); modified = false; } }