using Microsoft.Extensions.Logging;
namespace PlumbingRepairContracts.DI
{
public class DependencyManager
{
private readonly IDependencyContainer _dependencyManager;
private static DependencyManager? _manager;
private static readonly object _locjObject = new();
private DependencyManager()
{
_dependencyManager = new ServiceDependencyContainer();
}
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();
var bsExtensions = ServiceProviderLoader.GetBusinessLogicImplementationExtensions();
if (bsExtensions == null)
{
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей бизнес-логики");
}
// регистрируем зависимости
bsExtensions.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();
}
}