using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AircraftPlantContracts.DependencyInjections { /// /// Реализация интерфейса установки зависимости между элементами /// public class ServiceDependencyContainer : IDependencyContainer { /// /// Провайдер сервисов для разрешения зависимостей /// private ServiceProvider? _serviceProvider; /// /// Коллекция сервисов для регистрации зависимостей /// private readonly ServiceCollection _serviceCollection; /// /// Конструктор /// public ServiceDependencyContainer() { _serviceCollection = new ServiceCollection(); } /// /// Регистрация логгера /// /// public void AddLogging(Action configure) { _serviceCollection.AddLogging(configure); } /// /// Добавление зависимости /// /// /// /// public void RegisterType(bool isSingle) where U : class, T where T : class { if (isSingle) { _serviceCollection.AddSingleton(); } else { _serviceCollection.AddTransient(); } _serviceProvider = null; } /// /// Добавление зависимости /// /// /// public void RegisterType(bool isSingle) where T : class { if (isSingle) { _serviceCollection.AddSingleton(); } else { _serviceCollection.AddTransient(); } _serviceProvider = null; } /// /// Получение класса со всеми зависимостями /// /// /// public T Resolve() { if (_serviceProvider == null) { _serviceProvider = _serviceCollection.BuildServiceProvider(); } return _serviceProvider.GetService()!; } } }