예제 #1
0
        public static Dictionary <Type, ModuleArtifact> CreateArtifacts(this ModuleChild moduleChild, Type moduleType, ModuleArtifactType moduleArtifactType)
        {
            var artifactTypes = moduleType.Assembly.GetTypes().Where(type => !type.IsAbstract).Where(type => moduleArtifactType.IsValidArtifactType(type)).ToArray();
            var objectSpace   = moduleChild.XPObjectSpace();

            return(artifactTypes.ToList().ToDictionary(type => type, type => CreateArtifact(moduleChild, moduleArtifactType, objectSpace, type)));
        }
예제 #2
0
        public static IList <ExtenderInterface> CreateExtenderInterfaces(this ModuleChild moduleChild, Type artifactType)
        {
            var modelInterfaceExtenders = GetModelInterfaceExtenders(artifactType);
            var objectSpace             = moduleChild.XPObjectSpace();
            var extenderInterfaces      = new List <ExtenderInterface>();

            foreach (var extendedInterface in modelInterfaceExtenders.GetExtendedInterfaces().Where(type => !type.Name.StartsWith("IModelModelAdaptor")))
            {
                var interfaceExtenders = modelInterfaceExtenders.GetInterfaceExtenders(extendedInterface);
                foreach (var interfaceExtender in interfaceExtenders)
                {
                    Type extender          = interfaceExtender;
                    var  extenderInterface = objectSpace.GetObject <ExtenderInterface>(node => node.Name == extender.Name);
                    if (objectSpace.IsNewObject(extenderInterface))
                    {
                        extenderInterface.Name = interfaceExtender.Name;
                        extenderInterface.ExtendedInterface = GetExtendedInterface(objectSpace, extendedInterface);
                    }
                    extenderInterface.ModuleChilds.Add(moduleChild);
                    var modelNodeAttributes = CreateModelNodeAttributes(objectSpace, interfaceExtender);
                    extenderInterface.Attributes.AddRange(modelNodeAttributes);
                    extenderInterfaces.Add(extenderInterface);
                }
            }
            return(extenderInterfaces);
        }