using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FurnitureAssemblyContracts.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();
}
}