c# - 如何使用 DI usinq autofac .net 框架注册 ILogger(Microsoft.Extensions.Logging)
问题描述
我在 .net 框架项目中使用 Microsoft.Extensions.Logging 的 ILogger。现在我想在容器中注册 ILogger 但我不能。所有答案都是关于 .net 核心的。我试试
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);
我的课也是
public class TestController : ApiController
{
private readonly ILogger<TestController > _logger;
private readonly IService _service;
public TestController (IService service, ILogger<TestController > logger)
{
_service = service;
_logger = logger;
}
}
di 是正确的,因为其他服务已正确注入。当我在构造函数中包含记录器时,我收到消息尝试创建类型为“TestController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。
解决方案
由于尝试与这些扩展集成,请考虑填充服务集合并在注册所有内容后填充构建器,
来自文档的示例
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);
参考Autofac:.Net Core 集成
推荐阅读
- spring-boot - Spring Boot @ResponseStatus 不返回 HTTP 消息
- python - 会话变量永远不会等于值
- javascript - 使用 useEffect hook 时如何避免额外的 React 组件渲染?
- angular - disable 方法不适用于响应式表单
- installation - 检查 Chocolatey 包是安装还是升级
- c# - 仅当第二次打开视图时,UI 才会在将项目添加到 BindableCollection 时停止响应
- c# - 如何在 GMap.net 中将地图提供者设置为 OpenStreetMap
- excel - 事件每年发生的次数取决于开始日期和频率 (excel)
- java - 在大文本文件中查找文本数据的快速方法是什么?
- google-sheets - 当我尝试 STDEV、STDEVA、STDEVP、STDEVPA 时,表格对我的数据集做了奇怪的事情