gdo*_*ica 12 c# dependency-injection autofac serilog asp.net-core
我们在ASP.NET Core应用程序中有共同的BL类,它们位于ctor中:
Microsoft.Extensions.Logging.ILogger<Foo>
在ASP.NET Core中,ASP.NET的内部基础结构处理通过ILogger获取ILogger LoggerFactory.
我们现在想在控制台应用程序中重用这些BL类(用于异步作业),我们如何设置AutoFac和Serilog以注入不存在的Microsoft.Extensions.Logging.ILogger<T>环境LoggerFactory?
Tse*_*eng 29
Microsoft.Extensions.Logging(参见source)不是ASP.NET Core的一部分,可以独立运行.您需要做的就是注册ILoggerFactory和ILogger<>界面.
将ILoggerFactory 用于通过 Logger<T>实例的实际记录.
在控制台应用程序中使用Logging扩展时,建议仍然使用IServiceCollection,因为这允许您使用IServiceCollection 扩展方法来注册支持此模式的所有包.
var services = new ServiceCollection();
services.AddLogging();
// Initialize Autofac
var builder = new ContainerBuilder();
// Use the Populate method to register services which were registered
// to IServiceCollection
builder.Populate(services);
// Build the final container
IContainer container = builder.Build();
Run Code Online (Sandbox Code Playgroud)
这是推荐的方法,因为您不必详细考虑哪些类需要为具有Microsoft.Extensions.DependencyInjection集成支持的库注册.
但是当然你也可以手动注册它,但是当Microsoft.Extensions.Logging库发生更改时(添加新的依赖项),你将无法获得它,首先必须弄清楚或深入挖掘源代码以找到错误.
builder.RegisterType<LoggerFactory>()
.As<ILoggerFactory>()
.SingleInstance();
builder.RegisterGeneric(typeof(Logger<>))
.As(typeof(ILogger<>))
.SingleInstance();
Run Code Online (Sandbox Code Playgroud)
剩下的就是在构建容器之后或应用程序启动之前注册记录器类型:
var loggerFactory = container.Resolve<ILoggerFactory>();
loggerFactory.AddConsole()
.AddSerilog();
Run Code Online (Sandbox Code Playgroud)
并在您的服务ILogger<MyService>中照常注入.
| 归档时间: |
|
| 查看次数: |
10541 次 |
| 最近记录: |