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

时间:2014-09-11 11:07:11

标签: c# dependency-injection autofac

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

注册就是这样:

builder.RegisterType<NLogger>().As<ILogger>().SingleInstance();

如果不这样做,我将如何使用NLogger:

public class ProductService : IProductService
{
    private ILogger _logger;
    public ProductService(ILogger logger)
    {
        this._logger = logger;
    }
 }

非常感谢任何帮助。

问候。

1 个答案:

答案 0 :(得分:8)

您可以使用Property Injection

在班上你可以有

public class MyClass
{
    public ILogger Logger { get; set; }
}

并用

映射
builder.Register(c => new MyClass { Logger = c.Resolve<ILogger>() });

构造函数注入是99%的案例。


如果您只想获得一个实例,则需要致电

var logger = container.Resolve<ILogger>();

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

来实现
var logger = DependencyResolver.Current.GetService<ILogger>();