Esempio n. 1
0
        public void GetExportsImportDefinitionForDelegateExport(IContainer container)
        {
            var exportProvider = GetMefV1Container(container);

            var importDefinition = new MefV1.Primitives.ContractBasedImportDefinition(
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(SomeDelegate)),
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(SomeDelegate)),
                new KeyValuePair <string, Type>[]
            {
                new KeyValuePair <string, Type>("A", typeof(string)),
            },
                MefV1.Primitives.ImportCardinality.ZeroOrMore,
                false,
                true,
                MefV1.CreationPolicy.Any);

            var results = exportProvider.GetExports(importDefinition).ToArray();

            Assert.Equal(2, results.Length);
            Assert.Equal(1, results.Count(r => r.Metadata["A"].Equals("instance")));
            Assert.Equal(1, results.Count(r => r.Metadata["A"].Equals("static")));

            foreach (var export in results)
            {
                Assert.IsAssignableFrom(typeof(MefV1.Primitives.ExportedDelegate), export.Value);
                var          exportedDelegate = (MefV1.Primitives.ExportedDelegate)export.Value;
                SomeDelegate asSomeDelegate   = (SomeDelegate)exportedDelegate.CreateDelegate(typeof(SomeDelegate));
                Assert.Null(asSomeDelegate(null, null));

                Delegate asDelegate = exportedDelegate.CreateDelegate(typeof(Delegate));
                Assert.Null(asDelegate.DynamicInvoke(new object[2]));
            }
        }
Esempio n. 2
0
        public void GetExportsImportDefinitionForDelegateExportWithMismatchingSignature(IContainer container)
        {
            var exportProvider = GetMefV1Container(container);

            var importDefinition = new MefV1.Primitives.ContractBasedImportDefinition(
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(SomeDelegate)),
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(SomeDelegate)),
                new KeyValuePair <string, Type> [0],
                MefV1.Primitives.ImportCardinality.ZeroOrMore,
                false,
                true,
                MefV1.CreationPolicy.Any);

            var results = exportProvider.GetExports(importDefinition).ToArray();

            Assert.Equal(1, results.Length);

            foreach (var export in results)
            {
                Assert.IsAssignableFrom(typeof(MefV1.Primitives.ExportedDelegate), export.Value);
                var      exportedDelegate = (MefV1.Primitives.ExportedDelegate)export.Value;
                Delegate asDelegate       = exportedDelegate.CreateDelegate(typeof(Delegate));
                Assert.Null(asDelegate.DynamicInvoke(new object[1]));
            }
        }
Esempio n. 3
0
        public void GetExportsImportDefinitionForDelegateReturningProperty(IContainer container)
        {
            var exportProvider = GetMefV1Container(container);

            SomeDelegate del = exportProvider.GetExportedValue <SomeDelegate>();

            Assert.Null(del(null, null));

            var importDefinition = new MefV1.Primitives.ContractBasedImportDefinition(
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(SomeDelegate)),
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(SomeDelegate)),
                new KeyValuePair <string, Type> [0],
                MefV1.Primitives.ImportCardinality.ZeroOrMore,
                false,
                true,
                MefV1.CreationPolicy.Any);

            var results = exportProvider.GetExports(importDefinition).ToArray();

            Assert.Equal(1, results.Length);
            Assert.IsAssignableFrom(typeof(SomeDelegate), results[0].Value);
        }
Esempio n. 4
0
        public void GetExportsImportDefinitionForTypeExport(IContainer container)
        {
            var v3Container = (TestUtilities.V3ContainerWrapper)container;

            var exportProvider   = v3Container.ExportProvider.AsExportProvider();
            var importDefinition = new MefV1.Primitives.ContractBasedImportDefinition(
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(Tree)),
                MefV1.AttributedModelServices.GetTypeIdentity(typeof(Tree)),
                new KeyValuePair <string, Type>[]
            {
                new KeyValuePair <string, Type>("A", typeof(string)),
            },
                MefV1.Primitives.ImportCardinality.ZeroOrMore,
                false,
                true,
                MefV1.CreationPolicy.Any);

            var results = exportProvider.GetExports(importDefinition).ToArray();

            Assert.Equal(1, results.Length);
            Assert.Equal("b", results[0].Metadata["A"]);
            Assert.IsType <Tree>(results[0].Value);
        }