我有一个需要无参数构造函数的现有类。我想记录错误和其中的一些其他数据。在我的应用程序的其他任何地方,我将ILoggerFactory
放在我的构造函数中,DI负责处理它,因此我可以记录等等。在这种情况下,由于无参数构造函数的要求,我不能这样做。
我可以创建ILoggerFactory
的实例或我从Startup类添加到依赖注入流中的任何其他类吗?
答案 0 :(得分:2)
在Configure(在Startup.cs中)中,传入IApplicationBuilder,它具有ApplicationServices属性(IServiceProvider)。
您可以轻松地执行类似
的操作public void Configure(IApplicationBuilder app)
{
GetMeSomeServiceLocator.Instance = app.ApplicationServices;
}
public static class GetMeSomeServiceLocator
{
public static IServiceProvider Instance { get; set; }
}
然后,在某个完全不相关的地方,做
public void SomeRandomMethod()
{
var service = GetMeSomeServiceLocator.Instance.GetService<MyAwesomeService>();
// Do something with service
}
这是一种可怕的反模式,但你永远不应该这样做。
从https://github.com/aspnet/DependencyInjection/issues/294无耻地偷走(以便后人在这里)。
答案 1 :(得分:0)
Autofac支持属性注入,通过该属性,您可以在从容器中解析出对象后注入Logger。它是使用构建器代码中的.PropertiesAutowired
配置的。