Exemple #1
0
        // загрузка генераторов из плагинов
        private void LoadPluginGenerators()
        {
            string        pluginsPath     = pathNavigator.GetPluginsDirectory();
            DirectoryInfo pluginDirectory = new DirectoryInfo(pluginsPath);

            if (!pluginDirectory.Exists)
            {
                pluginDirectory.Create();
            }

            string[] pluginFiles = Directory.GetFiles(pluginsPath, pathNavigator.GetPluginExtension());

            Console.WriteLine("Генераторы из плагинов");
            foreach (var file in pluginFiles)
            {
                Assembly asm = Assembly.LoadFile(file);

                // IGenerator
                Type[] pluginGeneratorsTypes = asm.GetTypes().Where(lambdaGenerator.Compile()).ToArray();

                IGenerator generator;
                foreach (Type type in pluginGeneratorsTypes)
                {
                    generator = asm.CreateInstance(type.FullName) as IGenerator;
                    pluginGeneratorsDictionary.TryAdd(generator.GetObjectType(), generator);
                    Console.WriteLine(type.Name);
                }

                // ICollectionGenerator
                Type[] pluginCollectionGeneratorsTypes = asm.GetTypes().Where(lambdaCollectionGenerator.Compile()).ToArray();

                ICollectionGenerator collectionGenerator;
                foreach (Type type in pluginCollectionGeneratorsTypes)
                {
                    collectionGenerator = asm.CreateInstance(type.FullName) as ICollectionGenerator;
                    pluginCollectionGeneratorsDictionary.TryAdd(collectionGenerator.GetCollectionType(), collectionGenerator);
                    Console.WriteLine(type.Name);
                }
            }
        }