Пример #1
0
        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));
        }
Пример #2
0
        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
        }
Пример #3
0
        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
        }
Пример #4
0
    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);
    }
Пример #5
0
        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
        }