разрешить экземпляр NLog с помощью контейнера Unity

#c# #dependency-injection #unity-container

#c# #внедрение зависимостей #unity-контейнер

Вопрос:

У меня есть следующий класс:

 public class TestInjection
{
    private ILogger logger;
    public TestInjection(ILogger logger)
    {
        this.logger = logger;
    }

    public void Process()
    {
        try
        {
            int zero = 0;
            int result = 5 / zero;
        }
        catch (DivideByZeroException ex)
        {
            logger.Log(LogLevel.Error, "test message", ex);
            Console.WriteLine("logged message from class");
        }
    }
}
  

И в моем Program.cs у меня есть код:

 IUnityContainer container = new UnityContainer();
container.RegisterType<TestInjection>();

var myTestClass = container.Resolve<TestInjection>(new ResolverOverride[] { new ParameterOverride("logger", LogManager.GetCurrentClassLogger()) });
myTestClass.Process();
  

Как разрешить LogManager.GetCurrentClassLogger() с помощью контейнера Unity, если конструктор Logger класса по умолчанию недоступен?

PS: Это мой первый опыт работы с DI и Unity.

Ответ №1:

Вот как я сделал:

 IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger>(
    new InjectionFactory(l => LogManager.GetCurrentClassLogger()));
container.RegisterType<TestInjection>();

var myTestClass = container.Resolve<TestInjection>(
    new ResolverOverride[]
    {
        new ParameterOverride("logger", container.Resolve<ILogger>())
    });
myTestClass.Process();