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)); }
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"), }), }); }
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); }