using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
///
/// Менеджер для работы с зависимостями
///
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();
}
}