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