private IEnumerable <IModule> CreateFromAssemblies(IAssemblyEnumerator assemblyEnumerator) { //var implementedInterfaces = new Type[] { typeof(ICalculatorFunction), typeof(ICalculatorAssemblyInfo) }; var classAttributes = new Type[] { typeof(FunctionAttribute), typeof(AssemblyInfoAttribute) }; var extensionObjectFactory = new ExtensionObjectFactory(); var assemblyExtensionObjectsEnumeration = extensionObjectFactory.Create(assemblyEnumerator, null, null, classAttributes); var moduleList = new List <IModule>(); foreach (var assemblyExtensionObjects in assemblyExtensionObjectsEnumeration) { var(assemblyInfo, calculatorFunctions) = this.SeparateObjects(assemblyExtensionObjects); foreach (var functionObject in calculatorFunctions) { var module = new Module() { Function = functionObject, AssemblyInfo = assemblyInfo, Assembly = assemblyExtensionObjects.Assembly }; moduleList.Add(module); } } return(moduleList); }
public IEnumerable <IExtensionAssemblyObjects> Create(IAssemblyEnumerator assemblyEnumerator, IEnumerable <Type> classes, IEnumerable <Type> implementedInterfaces, IEnumerable <Type> classAttributes) { var extensionAssemblyObjectsList = new List <IExtensionAssemblyObjects>(); var loader = new AssemblyLoader(); var instantiator = new ActivatorTypeInstantiator(); var creator = new ExtensionAssemblyTypesCreatorV1(instantiator); foreach (var assembly in assemblyEnumerator) { var assemblyTypesEnumeration = loader.Load(assembly, classes, implementedInterfaces, classAttributes); foreach (var assemblyTypes in assemblyTypesEnumeration) { var extensionObjects = creator.Create(assemblyTypes); extensionAssemblyObjectsList.Add(extensionObjects); } } return(extensionAssemblyObjectsList); }