我有一个需要无参数构造函数的现有类。我想记录一个错误和其中的一些其他数据。在我的应用程序的其他任何地方,我都将 ILoggerFactory
放在我的构造函数中,DI 会处理它,因此我可以记录等等。由于无参数构造函数的要求,在这种情况下我不能这样做。
我可以创建 ILoggerFactory
的实例或我从 Startup 类放入依赖注入(inject)流中的任何其他类吗?
最佳答案
在 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 (这样它就会留在这里供后代使用)。
关于c# - 如何在不使用依赖注入(inject)的情况下实例化 ILoggerFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46383377/