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();
}
}