using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AircraftPlantContracts.DependencyInjections
{
///
/// Реализация интерфейса установки зависимости между элементами
///
public class ServiceDependencyContainer : IDependencyContainer
{
///
/// Провайдер сервисов для разрешения зависимостей
///
private ServiceProvider? _serviceProvider;
///
/// Коллекция сервисов для регистрации зависимостей
///
private readonly ServiceCollection _serviceCollection;
///
/// Конструктор
///
public ServiceDependencyContainer()
{
_serviceCollection = new ServiceCollection();
}
///
/// Регистрация логгера
///
///
public void AddLogging(Action configure)
{
_serviceCollection.AddLogging(configure);
}
///
/// Добавление зависимости
///
///
///
///
public void RegisterType(bool isSingle) where U : class, T where T : class
{
if (isSingle)
{
_serviceCollection.AddSingleton();
}
else
{
_serviceCollection.AddTransient();
}
_serviceProvider = null;
}
///
/// Добавление зависимости
///
///
///
public void RegisterType(bool isSingle) where T : class
{
if (isSingle)
{
_serviceCollection.AddSingleton();
}
else
{
_serviceCollection.AddTransient();
}
_serviceProvider = null;
}
///
/// Получение класса со всеми зависимостями
///
///
///
public T Resolve()
{
if (_serviceProvider == null)
{
_serviceProvider = _serviceCollection.BuildServiceProvider();
}
return _serviceProvider.GetService()!;
}
}
}