我有一个带有记录器的 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>>();
你想多了。您只需注册
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 包可以让您实现相同的目的。