/// <summary> /// Конфигурирование сервисов. /// </summary> /// <param name="buildContext">Контекст построения приложения.</param> public void ConfigureServices(BuildContext buildContext) { var logger = buildContext.Logger; StartupConfiguration startupConfiguration = buildContext.StartupConfiguration; var configurationRoot = buildContext.ConfigurationRoot; var services = buildContext.ServiceCollection; // Заменяем реализацию фабрики опций на свою. services.Add(ServiceDescriptor.Transient(typeof(IOptionsFactory <>), typeof(Configuration.OptionsFactory <>))); // Добавляем поддержку IOptions, IOptionsSnapshot, IOptionsMonitor services.AddOptions(); // Logging services.RegisterLogging(buildContext.LoggerFactory); // Регистрируем строготипизированные конфигурации. services.RegisterConfigurationTypes(configurationRoot, buildContext.ExportedTypes, startupConfiguration); // Регистрируем типы по атрибуту [Register] services.RegisterWithRegisterAttribute(buildContext.ExportedTypes); // todo: зарегистрировать не исходные типы, а результирующий services.AddSingleton(buildContext.StartupConfiguration); services.AddSingleton(buildContext.StartupInfo); var modulesOptions = startupConfiguration.Modules; startupConfiguration.ConfigureModules(modulesOptions); // Регистрируем модули. List <Type> moduleTypes = new List <Type>(); if (modulesOptions.AutoDiscoverModules) { moduleTypes = buildContext.ExportedTypes.GetClassTypesAssignableTo <IModule>().ToList(); logger.LogInformation($"Found {moduleTypes.Count} modules:"); foreach (var moduleType in moduleTypes) { logger.LogInformation($"Autodiscovered module: {moduleType.Name}"); } } var userDefinedModules = modulesOptions.ModuleTypes; if (userDefinedModules.Length > 0) { logger.LogInformation("UserDefinedModules modules:"); foreach (var moduleType in userDefinedModules) { logger.LogInformation($"UserDefined module: {moduleType.Name}"); } moduleTypes.AddRange(userDefinedModules); } if (moduleTypes.Count > 0) { services.RegisterModules(moduleTypes); } }
/// <summary> /// Конфигурирование сервисов. /// </summary> /// <param name="buildContext">Контекст построения приложения.</param> public void ConfigureServices(BuildContext buildContext) { var logger = buildContext.Logger; logger.LogInformation("ConfigureServices started"); StartupConfiguration startupConfiguration = buildContext.StartupConfiguration; ILoggerFactory loggerFactory = buildContext.LoggerFactory; var configurationRoot = buildContext.ConfigurationRoot; var services = buildContext.ServiceCollection; // Logging services.RegisterLogging(loggerFactory); // Регистрируем строготипизированные конфигурации. services.RegisterConfigurationTypes(configurationRoot, buildContext.ExportedTypes, startupConfiguration.Profile); // Регистрируем типы по атрибуту [Register] services.RegisterWithRegisterAttribute(buildContext.ExportedTypes); // todo: зарегистрировать не исходные типы, а результирующий services.AddSingleton(buildContext.StartupConfiguration); services.AddSingleton(buildContext.StartupInfo); var modulesOptions = startupConfiguration.Modules; startupConfiguration.ConfigureModules(modulesOptions); // Регистрируем модули. List <Type> moduleTypes = new List <Type>(); if (modulesOptions.AutoDiscoverModules) { moduleTypes = buildContext.ExportedTypes.GetClassTypesAssignableTo <IModule>().ToList(); logger.LogInformation($"Found {moduleTypes.Count} modules:"); foreach (var moduleType in moduleTypes) { logger.LogInformation($"Autodiscovered module: {moduleType.Name}"); } } var userDefinedModules = modulesOptions.ModuleTypes; if (userDefinedModules.Length > 0) { logger.LogInformation("UserDefinedModules modules:"); foreach (var moduleType in userDefinedModules) { logger.LogInformation($"UserDefined module: {moduleType.Name}"); } moduleTypes.AddRange(userDefinedModules); } if (moduleTypes.Count > 0) { services.RegisterModules(moduleTypes); } logger.LogInformation("ConfigureServices finished"); }