使用AutoFac而不使用构造函数注入

Cod*_*elp 1 c# dependency-injection autofac

我正在尝试使用AutoFac,并且所有示例都使用构造函数注入来显示它,这是一种建议的做法.没关系,但我想知道如何在无法进行构造函数注入的情况下使用它.例如,我想在我的应用程序中使用NLogger.

注册如下:

builder.RegisterType<NLogger>().As<ILogger>().SingleInstance();
Run Code Online (Sandbox Code Playgroud)

如何在不执行此操作的情况下使用NLogger:

public class ProductService : IProductService
{
    private ILogger _logger;
    public ProductService(ILogger logger)
    {
        this._logger = logger;
    }
 }
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

问候.

dav*_*v_i 8

您可以使用Property Injection.

在你的课堂上你可以拥有

public class MyClass
{
    public ILogger Logger { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和地图

builder.Register(c => new MyClass { Logger = c.Resolve<ILogger>() });
Run Code Online (Sandbox Code Playgroud)

尽管如此,构造函数注入是99%的情况.


如果您只想获得一个需要打电话的实例

var logger = container.Resolve<ILogger>();
Run Code Online (Sandbox Code Playgroud)

container你的AutoFac容器在哪里- 这可以从全局变量中提取 - 在ASP.NET MVC中(如果你正好使用它)你可以通过调用

var logger = DependencyResolver.Current.GetService<ILogger>();
Run Code Online (Sandbox Code Playgroud)

  • 全局与否不是问题,我可能只想以一种方法使用它。我想知道 AutoFac 是否可以给出一个没有构造函数或参数的实例。 (2认同)