基于提供的代码的假设是
public class SlackLoggerProvider : ILoggerProvider {
private readonly IHttpClientFactory clientFactory;
public SlackLoggerProvider(IHttpClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
//...
}
将必要的类型添加到服务集合中,以便框架在运行时解析它们
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) => {
services.AddHttpClient();
services.AddSingleton<ILoggerProvider, SlackLoggerProvider>();
});
日志生成器在启动时可以使用添加的类型。
所有AddProvider 扩展在所示示例中所做的就是将ILoggerProvider 派生实例作为单例添加到服务集合中。
public static ILoggingBuilder AddProvider(this ILoggingBuilder builder, ILoggerProvider provider)
{
builder.Services.AddSingleton(provider);
return builder;
}
Source
你可以更进一步,添加一个扩展
public static class SlackLoggerBuilderExtension {
public static ILoggingBuilder AddSlack(this ILoggingBuilder builder) {
builder.Services.AddHttpClient();
builder.Services.AddSingleton<ILoggerProvider, SlackLoggerProvider>();
//or
//builder.Services.AddSingleton<ILoggerProvider>(sp =>
// new SlackLoggerProvider(sp.GetRequiredService<IHttpClientFactory>())
//);
return builder;
}
}
确保添加了所需的依赖项。
使用过
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logBuilder) => {
logBuilder.AddSlack();
});