internal static IContainer CreateContainerV1(IReadOnlyList <Assembly> assemblies, Type[] parts) { Requires.NotNull(parts, nameof(parts)); var catalogs = assemblies.Select(a => new MefV1.Hosting.AssemblyCatalog(a)) .Concat <MefV1.Primitives.ComposablePartCatalog>(new[] { new MefV1.Hosting.TypeCatalog(parts) }); var catalog = new MefV1.Hosting.AggregateCatalog(catalogs); return(CreateContainerV1(catalog)); }
public static PluginHost Create() { var builder = new System.ComponentModel.Composition.Registration.RegistrationBuilder(); // addins builder .ForTypesDerivedFrom<IAddinContract>() //.Export<IAddinContract>() .ExportInterfaces() ; // host builder .ForType<PluginHost>() //.ImportProperty(x => x.Addins, b => b.AsMany()) .Export<PluginHost>() ; var hostCatalog = new System.ComponentModel.Composition.Hosting.AssemblyCatalog(typeof(PluginHost).Assembly, builder); var aCataog = new System.ComponentModel.Composition.Hosting.AggregateCatalog(hostCatalog); #if false var catalog = new System.ComponentModel.Composition.Hosting.DirectoryCatalog("addins"); aCataog.Catalogs.Add(catalog); #else foreach (var f in new DirectoryInfo("addins").GetFiles().Where(x => x.Name.ToLower().EndsWith(".dll"))) { var catalog = new System.ComponentModel.Composition.Hosting.AssemblyCatalog(Assembly.LoadFile(f.FullName), builder); aCataog.Catalogs.Add(catalog); } #endif var container = new System.ComponentModel.Composition.Hosting.CompositionContainer(aCataog); #if false var host = new PluginHost(); container.ComposeParts(host); return host; #else return container.GetExportedValue<PluginHost>(); #endif }
static public PluginHost Create() { var builder = new System.ComponentModel.Composition.Registration.RegistrationBuilder(); // addins builder .ForTypesDerivedFrom <IAddinContract>() //.Export<IAddinContract>() .ExportInterfaces() ; // host builder .ForType <PluginHost>() //.ImportProperty(x => x.Addins, b => b.AsMany()) .Export <PluginHost>() ; var hostCatalog = new System.ComponentModel.Composition.Hosting.AssemblyCatalog(typeof(PluginHost).Assembly, builder); var aCataog = new System.ComponentModel.Composition.Hosting.AggregateCatalog(hostCatalog); #if false var catalog = new System.ComponentModel.Composition.Hosting.DirectoryCatalog("addins"); aCataog.Catalogs.Add(catalog); #else foreach (var f in new DirectoryInfo("addins").GetFiles().Where(x => x.Name.ToLower().EndsWith(".dll"))) { var catalog = new System.ComponentModel.Composition.Hosting.AssemblyCatalog(Assembly.LoadFile(f.FullName), builder); aCataog.Catalogs.Add(catalog); } #endif var container = new System.ComponentModel.Composition.Hosting.CompositionContainer(aCataog); #if false var host = new PluginHost(); container.ComposeParts(host); return(host); #else return(container.GetExportedValue <PluginHost>()); #endif }
public static System.ComponentModel.Composition.Hosting.AggregateCatalog GetMefCatalogs() { var catalog = new System.ComponentModel.Composition.Hosting.AggregateCatalog(); // You should probably use these two lines, or the following lines, but not both. If you use // this option you will need to ensure that the libs are all in the same directory. catalog.Catalogs.Add(new System.ComponentModel.Composition.Hosting.DirectoryCatalog(System.IO.Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory), "*.dll")); catalog.Catalogs.Add(new System.ComponentModel.Composition.Hosting.DirectoryCatalog(System.IO.Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory), "*.exe")); //foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) //{ // if (!assembly.FullName.StartsWith("System", StringComparison.OrdinalIgnoreCase) && // !assembly.FullName.StartsWith("Microsoft", StringComparison.OrdinalIgnoreCase) && // !assembly.FullName.StartsWith("mscorlib", StringComparison.OrdinalIgnoreCase) && // !assembly.FullName.StartsWith("Accessibility", StringComparison.OrdinalIgnoreCase) && // !assembly.FullName.StartsWith("vshost32", StringComparison.OrdinalIgnoreCase)) // { // Console.WriteLine("Found assembly: " + assembly.FullName); // catalog.Catalogs.Add(new System.ComponentModel.Composition.Hosting.AssemblyCatalog(assembly)); // } //} return(catalog); }
private static void Main(string[] args) { #region MEF1 System.ComponentModel.Composition.Hosting.AggregateCatalog aggregateCatalog = new System.ComponentModel.Composition.Hosting.AggregateCatalog(); aggregateCatalog.Catalogs.Add(new System.ComponentModel.Composition.Hosting.AssemblyCatalog(typeof(Program).Assembly)); System.ComponentModel.Composition.Hosting.CompositionContainer compositionContainer = new System.ComponentModel.Composition.Hosting.CompositionContainer(aggregateCatalog); { ClassA classA = compositionContainer.GetExportedValue <ClassA>(); classA.Log(); classA.ClassB.Value.Log(); classA.ClassB.Value.Log(); } { ClassA classA = compositionContainer.GetExportedValue <ClassA>(); classA.Log(); classA.ClassB.Value.Log(); classA.ClassB.Value.Log(); } { ClassB classB = compositionContainer.GetExportedValue <ClassB>(); classB.Log(); classB.ClassA.Value.Log(); classB.ClassA.Value.Log(); } { ClassB classB = compositionContainer.GetExportedValue <ClassB>(); classB.Log(); classB.ClassA.Value.Log(); classB.ClassA.Value.Log(); } #endregion #region MEF2 System.Composition.Hosting.ContainerConfiguration containerConfiguration = new System.Composition.Hosting.ContainerConfiguration().WithAssembly(typeof(Program).Assembly); System.Composition.Hosting.CompositionHost compositionHost = containerConfiguration.CreateContainer(); { ClassA classA = compositionHost.GetExport <ClassA>(); classA.Log(); classA.ClassB.Value.Log(); classA.ClassB.Value.Log(); } { ClassA classA = compositionHost.GetExport <ClassA>(); classA.Log(); classA.ClassB.Value.Log(); classA.ClassB.Value.Log(); } { ClassB classB = compositionHost.GetExport <ClassB>(); classB.Log(); classB.ClassA.Value.Log(); classB.ClassA.Value.Log(); } { ClassB classB = compositionHost.GetExport <ClassB>(); classB.Log(); classB.ClassA.Value.Log(); classB.ClassA.Value.Log(); } #endregion }