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