用统一容器解析NLog实例

本文关键字:NLog 实例 | 更新日期: 2023-09-27 18:13:27

我有以下类:

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()与统一容器,如果Logger类的默认构造函数它是不可访问的?

PS:这是我第一次使用DI和Unity。

用统一容器解析NLog实例

我是这样做的:

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();