using System;
namespace ToolsModule.ManagmentDependency
{
///
/// Менеджер для работы с зависимостями
///
public class DependencyManager
{
private readonly IDependencyManager _dependencyManager;
private static DependencyManager _manager;
private static readonly object _locjObject = new();
private DependencyManager()
{
_dependencyManager = new UnityContainerManager();
}
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.Count == 0)
{
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
}
// регистрируем зависимости
foreach (var e in ext)
{
e.RegisterServices();
}
}
///
/// Добавление зависимости
///
///
///
public void RegisterType() where U : T => _dependencyManager.RegisterType();
///
/// Добавление зависимости
///
///
public void RegisterType() => _dependencyManager.RegisterType();
///
/// Получение класса со всеми зависмостями
///
///
///
public T Resolve() => _dependencyManager.Resolve();
///
/// Получение класса со всеми зависмостями
///
///
///
public object Resolve(Type t) => _dependencyManager.Resolve(t);
}
}