使用 AutoFac 而无需构造函数注入

问题描述 投票:0回答:1

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

注册过程如下:

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

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

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

非常感谢任何帮助。

问候。

c# dependency-injection autofac
1个回答
10
投票

您可以使用属性注入

在你的课堂上你可以有

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>();
© www.soinside.com 2019 - 2024. All rights reserved.