如何使用 DI 使用 inq autofac .net 框架注册 ILogger(Microsoft.Extensions.Logging)

dim*_*its 6 .net c# dependency-injection autofac ilogger

我在 .net 框架项目中使用 Microsoft.Extensions.Logging 中的 ILogger。现在我想在容器中注册 ILogger 但我不能。所有答案都是关于 .net core 的。我尝试

var builder = new ContainerBuilder();

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

//first try
builder.RegisterGeneric(typeof(Logger<>)).As(typeof(ILogger<>));
IServiceCollection services = new ServiceCollection();

//second try
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
IContainer container = builder.Build();

httpConfig.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

我的班级也是

public class TestController : ApiController
{
    private readonly ILogger<TestController > _logger;
    private readonly IService _service;

    public TestController (IService service, ILogger<TestController > logger)
        {
            _service = service;
            _logger = logger;
        }
}
Run Code Online (Sandbox Code Playgroud)

di 是正确的,因为其他服务已注入正确的。当我在构造函数中包含记录器时,我收到消息尝试创建“TestController”类型的控制器时发生错误。确保控制器具有无参数公共构造函数。

Nko*_*osi 8

由于尝试与这些扩展集成,请考虑填充预期的服务集合,并在注册所有内容后填充构建器,

文档中的示例

var builder = new ContainerBuilder();

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

IServiceCollection services = new ServiceCollection();

// The Microsoft.Extensions.Logging package provides this one-liner
// to add logging services.
services.AddLogging();

// Once you've registered everything in the ServiceCollection, call
// Populate to bring those registrations into Autofac. This is
// just like a foreach over the list of things in the collection
// to add them to Autofac.
builder.Populate(services);

IContainer container = builder.Build();

httpConfig.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

参考Autofac:.Net Core 集成

  • 非常感谢,我看到了,但我相信它仅适用于 .net core,但也适用于 .net Framework (2认同)
  • 这将在 .Net Framework 4.7.2 中工作。应该注意的是,您将需要 nuget 包 Autofac.Extensions.DependencyInjection (2认同)