Esempio n. 1
0
        public void AcceptsWithNonmatchingImportAndExport()
        {
            var types = new List <TypeDefinition>();
            var createTypeIdentity = IdentityFactory(types, new Dictionary <Type, TypeIdentity>());

            var repository = new Mock <ISatisfyPluginRequests>();
            {
                repository.Setup(r => r.IdentityByName(It.IsAny <string>()))
                .Returns <string>(n => types.Where(t => t.Identity.AssemblyQualifiedName.Equals(n)).Select(t => t.Identity).FirstOrDefault());
                repository.Setup(r => r.TypeByIdentity(It.IsAny <TypeIdentity>()))
                .Returns <TypeIdentity>(id => types.Where(t => t.Identity.Equals(id)).FirstOrDefault());
                repository.Setup(r => r.IsSubTypeOf(It.IsAny <TypeIdentity>(), It.IsAny <TypeIdentity>()))
                .Returns <TypeIdentity, TypeIdentity>((parent, child) => IsSubTypeOf(types, parent, child));
            }

            var importEngine = new PartImportEngine(repository.Object);

            var importDefinition = PropertyBasedImportDefinition.CreateDefinition(
                "A",
                createTypeIdentity(typeof(string)),
                ImportCardinality.ExactlyOne,
                true,
                CreationPolicy.NonShared,
                typeof(string).GetProperty("Length"),
                createTypeIdentity);
            var exportDefinition = MethodBasedExportDefinition.CreateDefinition(
                "A",
                typeof(string).GetMethod("Equals", new[] { typeof(string), typeof(string) }),
                createTypeIdentity);

            Assert.IsFalse(importEngine.Accepts(importDefinition, exportDefinition));
        }
 private static GroupDefinition CreateImportingGroup()
 {
     return(new GroupDefinition("b")
     {
         InternalConnections = Enumerable.Empty <PartImportToPartExportMap>(),
         Parts = new List <GroupPartDefinition>
         {
             new GroupPartDefinition(
                 TypeIdentity.CreateDefinition(typeof(string)),
                 0,
                 new Dictionary <ExportRegistrationId, SerializableExportDefinition>(),
                 new Dictionary <ImportRegistrationId, SerializableImportDefinition>
             {
                 {
                     new ImportRegistrationId(typeof(string), 0, "PartContract1"),
                     PropertyBasedImportDefinition.CreateDefinition(
                         "PartContract1",
                         TypeIdentity.CreateDefinition(typeof(int)),
                         ImportCardinality.ExactlyOne,
                         false,
                         CreationPolicy.Any,
                         typeof(ImportOnPropertyWithType).GetProperty("ImportingProperty"))
                 }
             },
                 new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                 new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
             new GroupPartDefinition(
                 TypeIdentity.CreateDefinition(typeof(string)),
                 1,
                 new Dictionary <ExportRegistrationId, SerializableExportDefinition>(),
                 new Dictionary <ImportRegistrationId, SerializableImportDefinition>
             {
                 {
                     new ImportRegistrationId(typeof(string), 1, "PartContract2"),
                     PropertyBasedImportDefinition.CreateDefinition(
                         "PartContract2",
                         TypeIdentity.CreateDefinition(typeof(string)),
                         ImportCardinality.ExactlyOne,
                         false,
                         CreationPolicy.Any,
                         typeof(ImportOnPropertyWithEnumerable).GetProperty("ImportingProperty"))
                 }
             },
                 new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                 new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
         },
         GroupImports = new List <GroupImportDefinition>
         {
             GroupImportDefinition.CreateDefinition(
                 "ContractName",
                 new GroupRegistrationId("b"),
                 null,
                 new List <ImportRegistrationId>
             {
                 new ImportRegistrationId(typeof(string), 0, "PartContract1"),
                 new ImportRegistrationId(typeof(string), 1, "PartContract2"),
             })
         },
     });
 }
        private static SerializableImportDefinition CreatePropertyImport(
            ContractBasedImportDefinition import,
            Func <Type, TypeIdentity> identityGenerator)
        {
            var memberInfo = ReflectionModelServices.GetImportingMember(import);

            if (memberInfo.MemberType != MemberTypes.Property)
            {
                throw new ArgumentOutOfRangeException("import");
            }

            // this is really ugly because we assume that the underlying methods for a property are named as:
            // get_PROPERTYNAME and set_PROPERTYNAME. In this case we assume that imports always
            // have a set method.
            var getMember = memberInfo.GetAccessors().First(m => m.Name.Contains("set_"));
            var name      = getMember.Name.Substring("set_".Length);
            var property  = getMember.DeclaringType.GetProperty(name);

            var requiredType = ExtractRequiredType(property.GetCustomAttributes(), property.PropertyType);

            if (requiredType == null)
            {
                return(null);
            }

            return(PropertyBasedImportDefinition.CreateDefinition(
                       import.ContractName,
                       TypeIdentity.CreateDefinition(requiredType),
                       import.Cardinality,
                       import.IsRecomposable,
                       import.RequiredCreationPolicy,
                       property,
                       identityGenerator));
        }
Esempio n. 4
0
        private static GroupDefinition CreateExportingDefinition()
        {
            var groupName = "Export";

            return(new GroupDefinition(groupName)
            {
                Parts = new List <GroupPartDefinition>
                {
                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(int)),
                        0,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>
                    {
                        {
                            new ExportRegistrationId(typeof(int), 0, "PartContract1"),
                            TypeBasedExportDefinition.CreateDefinition("PartContract1", typeof(int))
                        }
                    },
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>(),
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(string)),
                        1,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>
                    {
                        {
                            new ExportRegistrationId(typeof(string), 1, "PartContract2"),
                            TypeBasedExportDefinition.CreateDefinition("PartContract2", typeof(string))
                        }
                    },
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>(),
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(Version)),
                        2,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>
                    {
                        {
                            new ExportRegistrationId(typeof(string), 2, "PartContract2"),
                            TypeBasedExportDefinition.CreateDefinition("PartContract2", typeof(string))
                        }
                    },
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>(),
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),

                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(DateTime)),
                        2,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>
                    {
                        {
                            new ExportRegistrationId(typeof(string), 3, "PartContract3"),
                            TypeBasedExportDefinition.CreateDefinition("PartContract3", typeof(string))
                        }
                    },
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>(),
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(List <int>)),
                        2,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>(),
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>
                    {
                        {
                            new ImportRegistrationId(typeof(string), 1, "PartContract3"),
                            PropertyBasedImportDefinition.CreateDefinition(
                                "PartContract3",
                                TypeIdentity.CreateDefinition(typeof(string)),
                                ImportCardinality.ExactlyOne,
                                false,
                                CreationPolicy.Any,
                                typeof(ImportOnPropertyWithEnumerable).GetProperty("ImportingProperty"))
                        }
                    },
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
                },
                InternalConnections = new List <PartImportToPartExportMap>
                {
                    new PartImportToPartExportMap(
                        new ImportRegistrationId(typeof(string), 1, "PartContract3"),
                        new List <ExportRegistrationId>
                    {
                        new ExportRegistrationId(typeof(string), 3, "PartContract3")
                    }),
                },
                GroupExport = GroupExportDefinition.CreateDefinition(
                    "ContractName",
                    new GroupRegistrationId(groupName),
                    new List <ExportRegistrationId>
                {
                    new ExportRegistrationId(typeof(int), 0, "PartContract1"),
                    new ExportRegistrationId(typeof(string), 1, "PartContract2"),
                    new ExportRegistrationId(typeof(string), 2, "PartContract2"),
                }),
            });
        }
Esempio n. 5
0
        private static GroupDefinition CreateImportingDefinition()
        {
            var groupName = "Import";

            return(new GroupDefinition(groupName)
            {
                InternalConnections = Enumerable.Empty <PartImportToPartExportMap>(),
                Parts = new List <GroupPartDefinition>
                {
                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(List <string>)),
                        0,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>(),
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>
                    {
                        {
                            new ImportRegistrationId(typeof(string), 0, "PartContract1"),
                            PropertyBasedImportDefinition.CreateDefinition(
                                "PartContract1",
                                TypeIdentity.CreateDefinition(typeof(int)),
                                ImportCardinality.ExactlyOne,
                                false,
                                CreationPolicy.Any,
                                typeof(ImportOnPropertyWithType).GetProperty("ImportingProperty"))
                        }
                    },
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
                    new GroupPartDefinition(
                        TypeIdentity.CreateDefinition(typeof(List <double>)),
                        1,
                        new Dictionary <ExportRegistrationId, SerializableExportDefinition>(),
                        new Dictionary <ImportRegistrationId, SerializableImportDefinition>
                    {
                        {
                            new ImportRegistrationId(typeof(string), 1, "PartContract2"),
                            ConstructorBasedImportDefinition.CreateDefinition(
                                "PartContract2",
                                TypeIdentity.CreateDefinition(typeof(string)),
                                ImportCardinality.ExactlyOne,
                                CreationPolicy.Any,
                                typeof(Version).GetConstructor(
                                    new[]
                            {
                                typeof(string)
                            }).GetParameters().First())
                        }
                    },
                        new Dictionary <ScheduleActionRegistrationId, ScheduleActionDefinition>(),
                        new Dictionary <ScheduleConditionRegistrationId, ScheduleConditionDefinition>()),
                },
                GroupImports = new List <GroupImportDefinition>
                {
                    GroupImportDefinition.CreateDefinition(
                        "ContractName",
                        new GroupRegistrationId(groupName),
                        null,
                        new List <ImportRegistrationId>
                    {
                        new ImportRegistrationId(typeof(string), 0, "PartContract1"),
                        new ImportRegistrationId(typeof(string), 1, "PartContract2"),
                    })
                },
            });
        }
        private static IEnumerable <PartDefinition> CreatePluginTypes()
        {
            var plugins = new List <PartDefinition>
            {
                new PartDefinition
                {
                    Identity = TypeIdentity.CreateDefinition(typeof(ActionOnMethod)),
                    Exports  = new List <SerializableExportDefinition>
                    {
                        TypeBasedExportDefinition.CreateDefinition("ActionExport", typeof(ActionOnMethod))
                    },
                    Imports = new List <SerializableImportDefinition>(),
                    Actions = new List <ScheduleActionDefinition>
                    {
                        ScheduleActionDefinition.CreateDefinition(
                            "ActionMethod",
                            typeof(ActionOnMethod).GetMethod("ActionMethod"))
                    },
                    Conditions = new List <ScheduleConditionDefinition>(),
                },
                new PartDefinition
                {
                    Identity = TypeIdentity.CreateDefinition(typeof(ConditionOnMethod)),
                    Exports  = new List <SerializableExportDefinition>
                    {
                        TypeBasedExportDefinition.CreateDefinition("ConditionOnMethodExport", typeof(ConditionOnMethod))
                    },
                    Imports    = new List <SerializableImportDefinition>(),
                    Actions    = new List <ScheduleActionDefinition>(),
                    Conditions = new List <ScheduleConditionDefinition>
                    {
                        MethodBasedScheduleConditionDefinition.CreateDefinition(
                            "OnMethod",
                            typeof(ConditionOnMethod).GetMethod("ConditionMethod"))
                    },
                },
                new PartDefinition
                {
                    Identity = TypeIdentity.CreateDefinition(typeof(ConditionOnProperty)),
                    Exports  = new List <SerializableExportDefinition>
                    {
                        TypeBasedExportDefinition.CreateDefinition("ConditionOnPropertyExport", typeof(ConditionOnProperty))
                    },
                    Imports    = new List <SerializableImportDefinition>(),
                    Actions    = new List <ScheduleActionDefinition>(),
                    Conditions = new List <ScheduleConditionDefinition>
                    {
                        PropertyBasedScheduleConditionDefinition.CreateDefinition(
                            "OnProperty",
                            typeof(ConditionOnProperty).GetProperty("ConditionProperty"))
                    },
                },
                new PartDefinition
                {
                    Identity = TypeIdentity.CreateDefinition(typeof(ExportOnProperty)),
                    Exports  = new List <SerializableExportDefinition>
                    {
                        PropertyBasedExportDefinition.CreateDefinition(
                            typeof(IExportingInterface).FullName,
                            typeof(ExportOnProperty).GetProperty("ExportingProperty"))
                    },
                    Imports    = new List <SerializableImportDefinition>(),
                    Actions    = new List <ScheduleActionDefinition>(),
                    Conditions = new List <ScheduleConditionDefinition>(),
                },
                new PartDefinition
                {
                    Identity = TypeIdentity.CreateDefinition(typeof(ImportOnProperty)),
                    Exports  = new List <SerializableExportDefinition>
                    {
                        TypeBasedExportDefinition.CreateDefinition(typeof(ImportOnProperty).FullName, typeof(ImportOnProperty))
                    },
                    Imports = new List <SerializableImportDefinition>
                    {
                        PropertyBasedImportDefinition.CreateDefinition(
                            typeof(IExportingInterface).FullName,
                            TypeIdentity.CreateDefinition(typeof(IExportingInterface)),
                            ImportCardinality.ExactlyOne,
                            false,
                            CreationPolicy.Shared,
                            typeof(ImportOnProperty).GetProperty("ImportingProperty"))
                    },
                    Actions    = new List <ScheduleActionDefinition>(),
                    Conditions = new List <ScheduleConditionDefinition>(),
                }
            };

            return(plugins);
        }