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