我正在尝试使用AutoFac,并且所有示例都使用构造函数注入来显示它,这是一种建议的做法。 没关系,但我想知道如何在无法进行构造函数注入的情况下使用它。 例如,我想在我的应用程序中使用NLogger。
注册就是这样:
builder.RegisterType<NLogger>().As<ILogger>().SingleInstance();
如果不这样做,我将如何使用NLogger:
public class ProductService : IProductService
{
private ILogger _logger;
public ProductService(ILogger logger)
{
this._logger = logger;
}
}
非常感谢任何帮助。
问候。
答案 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>();