Beispiel #1
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
        }
Beispiel #2
0
 private CompositionService([MefV1.Import] ExportProvider exportProvider)
 {
     Requires.NotNull(exportProvider, nameof(exportProvider));
     this.container = new MefV1.Hosting.CompositionContainer(MefV1.Hosting.CompositionOptions.IsThreadSafe, exportProvider.AsExportProvider());
 }
Beispiel #3
0
 public void OnStart(System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     ExportContentLinks(container);
     ExportContentUserGroups(container);
 }
Beispiel #4
0
 public IValue ProcessMemberReference(MemberExpression expr, IGeneratedQueryCode gc, ICodeContext cc, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     throw new NotImplementedException();
 }
Beispiel #5
0
 public Expression ProcessConstantReferenceExpression(ConstantExpression expr, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     return(expr);
 }
Beispiel #6
0
 public IValue ProcessConstantReference(ConstantExpression expr, IGeneratedQueryCode codeEnv, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     return(new LINQToTTreeLib.Variables.ValSimple("35", typeof(int[])));
 }
Beispiel #7
0
 public Expression ProcessNew(NewExpression expression, out IValue result, IGeneratedQueryCode gc, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     throw new NotImplementedException();
 }
Beispiel #8
0
 public Expression ProcessMethodCall(MethodCallExpression expr, IGeneratedQueryCode gc, ICodeContext context, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     return(expr);
 }
Beispiel #9
0
 public static void ComposeParts(System.ComponentModel.Composition.Hosting.CompositionContainer container, Object[] attributedParts)
 {
     Contract.Requires(attributedParts != null);
     Contract.Requires(container != null);
 }
 public ComponentModel(MEFv1.Hosting.CompositionContainer container)
 {
     DefaultCompositionService = container;
     DefaultExportProvider     = container;
 }
Beispiel #11
0
 public static void ComposeExportedValue <T>(System.ComponentModel.Composition.Hosting.CompositionContainer container, string contractName, T exportedValue)
 {
     Contract.Requires(container != null);
     Contract.Requires(!string.IsNullOrEmpty(contractName));
 }
Beispiel #12
0
 public static void ComposeExportedValue <T>(System.ComponentModel.Composition.Hosting.CompositionContainer container, T exportedValue)
 {
     Contract.Requires(container != null);
 }
Beispiel #13
0
 /// <summary>
 /// Recupera o provedor de export.
 /// </summary>
 /// <param name="container"></param>
 /// <returns></returns>
 private static System.ComponentModel.Composition.Hosting.ExportProvider GetRootExportProvider(System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     if (_compositionContainerRootProviderField == null)
     {
         _compositionContainerRootProviderField = typeof(System.ComponentModel.Composition.Hosting.CompositionContainer).GetField("_rootProvider", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
     }
     return((System.ComponentModel.Composition.Hosting.ExportProvider)_compositionContainerRootProviderField.GetValue(container));
 }
Beispiel #14
0
 internal V1ContainerWrapper(MefV1.Hosting.CompositionContainer container)
 {
     Requires.NotNull(container, nameof(container));
     this.container = container;
 }
Beispiel #15
0
 public IValue CodeMethodCall(MethodCallExpression expr, IGeneratedQueryCode gc, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     throw new NotImplementedException();
 }
        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
        }
Beispiel #17
0
 public IValue ProcessMemberReference(MemberExpression expr, IGeneratedQueryCode gc, ICodeContext cc, System.ComponentModel.Composition.Hosting.CompositionContainer container)
 {
     return(null);
 }