public void ModulesConfigurationTest() { var modConf = new ModulesConfiguration(); Assert.NotNull(modConf.Modules); Assert.NotNull(modConf.Shell); }
/// <summary> /// Will select the shell with the name in the configuration /// </summary> protected void SelectShell(IEnumerable <Assembly> assemblies, ModulesConfiguration modulesConfig) { Type selectedShell; var shells = assemblies.SelectMany(ass => ass.GetTypes()) .Where(t => typeof(IModuleShell).IsAssignableFrom(t) && t.GetCustomAttribute <ModuleShellAttribute>() != null); if (string.IsNullOrEmpty(modulesConfig.Shell.ShellName)) { selectedShell = shells.FirstOrDefault(); } else { selectedShell = shells.FirstOrDefault(shellType => shellType.GetCustomAttribute <ModuleShellAttribute>().Name.Equals(modulesConfig.Shell.ShellName)); } if (selectedShell == null) { var fallbackShell = (FallbackShellViewModel)GlobalContainer.Resolve <IModuleShell>(FallbackShellViewModel.ShellName); fallbackShell.RunMode = Name; fallbackShell.ConfiguredShell = modulesConfig.Shell.ShellName; modulesConfig.Shell.ShellName = FallbackShellViewModel.ShellName; return; } var shellAttr = selectedShell.GetCustomAttribute <ModuleShellAttribute>(); modulesConfig.Shell.ShellName = shellAttr.Name; }
static void Main(string[] args) { // Create the application host object host = ApplicationHost.CreateApplicationHost(typeof(MyHost), "/", "c:\\"); int request_count = 10; SimpleWorkerRequest [] requests = new SimpleWorkerRequest[request_count]; int pos; for (pos = 0; pos != request_count; pos++) { requests[pos] = new SimpleWorkerRequest("test.aspx", "", Console.Out); } ModulesConfiguration.Add("syncmodule", typeof(SyncModule).AssemblyQualifiedName); ModulesConfiguration.Add("asyncmodule", typeof(AsyncModule).AssemblyQualifiedName); HandlerFactoryConfiguration.Add("get", "/", typeof(AsyncHandler).AssemblyQualifiedName); //HandlerFactoryConfiguration.Add("get", "/", typeof(SyncHandler).AssemblyQualifiedName); for (pos = 0; pos != request_count; pos++) { HttpRuntime.ProcessRequest(requests[pos]); } HttpRuntime.Close(); /* * Console.Write("Press Enter to quit."); * Console.WriteLine(); * Console.ReadLine(); */ }
/// <summary> /// Called when [modules configuration loaded]. /// </summary> private void OnModulesConfigurationLoaded(object sender, ModulesConfiguration modulesConfiguration) { //set config provider Container.SetInstance(Current.ConfigProvider); Container.SetInstance(modulesConfiguration); RunModeReady?.Invoke(this, modulesConfiguration); }
private static void RegisterModulesFromConfig(ContainerBuilder builder) { var modules = ModulesConfiguration.GetModulesFromConfiguration(); foreach (var module in modules) { builder.RegisterModule(module); } }
public AutoBindModule(ModulesConfiguration config) : base() { if (!typeof(T).IsInterface) { throw new Exception("T may be interface only"); } this.config = config; relevantTypes = new List <Type>(); necessaryType = null; necessaryTypeName = String.Empty; }
/// <inheritdoc /> public override void LoadModulesConfiguration() { var modulesConfig = new ModulesConfiguration(); SelectShell(Assemblies, modulesConfig); foreach (var assembly in Assemblies) { modulesConfig.Modules.AddRange(GetModuleConfigsFromAssembly(assembly, modulesConfig)); } ConfigProvider = new LocalConfigProvider(ConfigManager, modulesConfig); RaiseModulesConfigurationLoaded(modulesConfig); }
/// <summary> /// Initializes a new instance of the <see cref="LocalConfigProvider"/> class. /// </summary> public LocalConfigProvider(IConfigManager configManager, ModulesConfiguration modulesConfiguration) { _modulesConfiguration = modulesConfiguration; _configManager = configManager; }
public TextFileSourceModule(ModulesConfiguration config) : base() { this.config = config; LocalName = "File"; }
public PunctuationTextProcessorModule(ModulesConfiguration config) : base() { LocalName = "SpacesWithPunctuation"; }
public ConsoleResultWriter(ModulesConfiguration config) : this(config.OutputStream) { }
public TextSourceModule(ModulesConfiguration config) : base(config) { }
public PunctuationTextProcessor(ModulesConfiguration config) : this() { }
public TextFileResultWriter(ModulesConfiguration config) : this(config.OutputFilePath) { }
/// <summary> /// Gets the module configs from assembly. /// </summary> protected IEnumerable <ModulConfig> GetModuleConfigsFromAssembly(Assembly assembly, ModulesConfiguration modulesConfiguration) { var moduleConfigs = new List <ModulConfig>(); var modules = assembly.GetTypes().Where(t => typeof(IClientModule).IsAssignableFrom(t)).ToList(); foreach (var module in modules) { var att = module.GetCustomAttribute <ClientModuleAttribute>(); if (att == null) { continue; } var configuredModule = modulesConfiguration.Modules.FirstOrDefault(m => m.ModuleName == att.Name); if (configuredModule != null) { continue; } var libraryName = module.Assembly.ManifestModule.ScopeName; configuredModule = new ModulConfig { ModuleName = att.Name, SortIndex = 9999, IsEnabled = true, Accesses = new Dictionary <string, OperationAccess>() }; moduleConfigs.Add(configuredModule); } return(moduleConfigs); }
/// <summary> /// Called when the modules configuration loaded /// </summary> private void OnModulesConfigurationLoaded(object sender, ModulesConfiguration e) { }
public SpaceTextProcessor(ModulesConfiguration config) : this() { }
// инициализация /* * грузим все модули из сборки * выделяем источники, приемники, обработчики * делаем запрос с консоли, что делать */ /// <summary> /// Инициализирует проект /// </summary> private static void Initialize() { //Настройки можно вынести как настройки приложения, так и сделать сериализуемыми config = new ModulesConfiguration( inputFilePath: System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data", "FileSource.txt"), outputFilePath: System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data", "Result.txt"), connectionString: String.Empty, outputStream: Console.Out ); #if version1 //Более простой вариант, но требует создания модуля связки на каждый класс //Ищем модули для DI контейнера. var modules = new List <INinjectModule>(15); //Также для расширяемости можно добавить загрузку сборок из внешних библиотек, не подключенных //к проекту foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { var assemblyModules = assembly.GetTypes() .Where(t => t.GetInterfaces() .Any(i => i == typeof(INamedType))) .Select(t => Activator.CreateInstance(t, new object[] { config }) as INinjectModule) .ToArray(); modules.AddRange(assemblyModules); } //Здесь можно сделать проверку на наличие модулей с одинаковыми именами, //Так как в данном решении объекты создаются по имени связки kernel = new StandardKernel(modules.ToArray()); //Выбираем все источники sourses = modules .Where(m => m.GetType().GetInterfaces().Any(i => i == typeof(ISourceModule))) .Select(m => (m as INamedType).LocalName) .ToArray(); //Выбираем всех писателей writers = modules .Where(m => m.GetType().GetInterfaces().Any(i => i == typeof(IResultWriterModule))) .Select(m => (m as INamedType).LocalName) .ToArray(); //Выбираем все обработчики текста processors = modules .Where(m => m.GetType().GetInterfaces().Any(i => i == typeof(ITextProcessorModule))) .Select(m => (m as INamedType).LocalName) .ToArray(); #endif #if version2 //Более сложный вариант, но добавляющий больше гибкости: достаточно просто добавить класс //в сборку и унаследовать его от нужного интерфейса. Но заставляет жестко //связывать объекты исполнители с классом конфигурации textSourceModule = new TextSourceModule(config); textSourceModule.LoadAssebliesTypes(); resultWriterModule = new ResultWriterModule(config); resultWriterModule.LoadAssebliesTypes(); textProcessorModule = new TextProcessorModule(config); textProcessorModule.LoadAssebliesTypes(); sourses = textSourceModule.AvailableTypeNames; writers = resultWriterModule.AvailableTypeNames; processors = textProcessorModule.AvailableTypeNames; #endif }
public SpaceTextProcessor(ModulesConfiguration config) : base() { LocalName = "Spaces"; }
public ResultWriterModule(ModulesConfiguration config) : base(config) { }
public TextFileResultWriterModule(ModulesConfiguration config) : base() { this.config = config; LocalName = "File"; }
/// <summary> /// Raises the <see cref="LoadModulesConfigurationCompleted"/> event if someone is registered. /// </summary> protected virtual void RaiseModulesConfigurationLoaded(ModulesConfiguration e) { LoadModulesConfigurationCompleted?.Invoke(this, e); }
public TextFileSource(ModulesConfiguration config) : this(config.InputFilePath) { }
public ModulesConfigurationTests() { _appConfiguration = A.Fake <IConfiguration>(); _configuration = new ModulesConfiguration(_appConfiguration); }
public TextProcessorModule(ModulesConfiguration config) : base(config) { }