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 DependencyManager { /// /// Установка зависимостей /// private readonly IDependencyContainer _dependencyManager; /// /// Менеджер для работы с зависимостями /// private static DependencyManager? _manager; /// /// Блокировка /// private static readonly object _locjObject = new(); /// /// Конструктор /// private DependencyManager() { _dependencyManager = new UnityDependencyContainer(); } /// /// Получить ссылку /// public static DependencyManager Instance { get { if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } } return _manager; } } /// /// Иницализация библиотек, в которых идут установки зависомстей /// public static void InitDependency() { var ext = ServiceProviderLoader.GetImplementationExtensions(); if (ext == null) { throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям"); } // регистрируем зависимости ext.RegisterServices(); } /// /// Регистрация логгера /// /// public void AddLogging(Action configure) => _dependencyManager.AddLogging(configure); /// /// Добавление зависимости /// /// /// public void RegisterType(bool isSingle = false) where U : class, T where T : class => _dependencyManager.RegisterType(isSingle); /// /// Добавление зависимости /// /// /// public void RegisterType(bool isSingle = false) where T : class => _dependencyManager.RegisterType(isSingle); /// /// Получение класса со всеми зависмостями /// /// /// public T Resolve() => _dependencyManager.Resolve(); } }