如何在不使用依赖注入的情况下实例化ILoggerFactory?

时间:2017-09-23 19:16:35

标签: c# dependency-injection .net-core

我有一个需要无参数构造函数的现有类。我想记录错误和其中的一些其他数据。在我的应用程序的其他任何地方,我将ILoggerFactory放在我的构造函数中,DI负责处理它,因此我可以记录等等。在这种情况下,由于无参数构造函数的要求,我不能这样做。

我可以创建ILoggerFactory的实例或我从Startup类添加到依赖注入流中的任何其他类吗?

2 个答案:

答案 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配置的。