无法向 Unity 注册 Microsoft Logger

问题描述 投票:0回答:1

我有一个带有记录器的 Worker,该项目抛出一个错误: 依赖关系解析失败,类型=“Test.IWorker”,名称=“(无)”

public class SimpleWorker : IWorker
{
    private readonly ILogger _logger;
    public SimpleWorker(

        ILogger<SimpleWorker> logger)
    {
        _logger = logger;
    }
}

我使用的是Unity 4.0.0版本和.NET 4.8。

到目前为止,我已经尝试过在 StackOverflow 上找到的解决方案,但没有成功:

_container = new UnityContainer();
var loggerFactory = new LoggerFactory();
var factoryMethod =
    typeof(LoggerFactoryExtensions).
        GetMethods(BindingFlags.Static | BindingFlags.Public)
        .First(x => x.ContainsGenericParameters);

_container.RegisterType(typeof(ILogger<>), new InjectionFactory((c, t, s) =>
{
    var genFactoryMethod =
        factoryMethod.MakeGenericMethod(t.GetGenericArguments()[0]);
    return genFactoryMethod.Invoke(null, new object[] { loggerFactory });
}));

另外,我尝试过直接注入,但没有成功:

_container = new UnityContainer();
_container.RegisterType<ILogger<SimpleWorker>>();
c# .net dependency-injection unity-container .net-framework-version
1个回答
0
投票

你想多了。您只需注册

LoggerFactory
Logger<T>
实现即可:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

var factory = new LoggerFactory();
_container.RegisterInstance(factory,
    new ContainerControlledLifetimeManager());

_container.RegisterType(typeof(ILogger<>), typeof(Logger<>),
    new ContainerControlledLifetimeManager());

另请注意,有一个 Unity.Microsoft.Logging NuGet 包可以让您实现相同的目的。

© www.soinside.com 2019 - 2024. All rights reserved.