在IServiceCollection.AddLogging(C#/.net核心)中获取服务
在我的.net核心C#应用程序(不是ASP)中,我构建了一个类来处理我的服务。您必须这样配置它在IServiceCollection.AddLogging(C#/.net核心)中获取服务,c#,service,dependency-injection,core,C#,Service,Dependency Injection,Core,在我的.net核心C#应用程序(不是ASP)中,我构建了一个类来处理我的服务。您必须这样配置它 MyBaseClass.BuildServiceProvider(serviceCollection => serviceCollection .AddMyConfiguration(out var config) .AddMyEMailService()
MyBaseClass.BuildServiceProvider(serviceCollection =>
serviceCollection
.AddMyConfiguration(out var config)
.AddMyEMailService()
.AddMyLoggingService(config)
);
public static class ServiceCollectionHelper
{
public static IServiceCollection AddMyLoggingService(this IServiceCollection coll, IConfiguration config)
{
coll.AddLogging(builder =>
builder
.AddConfiguration(config)
.AddDebug()
.AddEventLog()
.AddProvider(new MyTicketLoggerProvider(config))
);
return coll;
}
}
问题是AddMyLoggingService,因为我不知道如何在其中获取其他服务。我已经通过了配置,我认为这不是DI想要的,现在我还必须通过电子邮件服务
日志记录服务如下所示
MyBaseClass.BuildServiceProvider(serviceCollection =>
serviceCollection
.AddMyConfiguration(out var config)
.AddMyEMailService()
.AddMyLoggingService(config)
);
public static class ServiceCollectionHelper
{
public static IServiceCollection AddMyLoggingService(this IServiceCollection coll, IConfiguration config)
{
coll.AddLogging(builder =>
builder
.AddConfiguration(config)
.AddDebug()
.AddEventLog()
.AddProvider(new MyTicketLoggerProvider(config))
);
return coll;
}
}
现在MyTicketLoggerProvider需要注入.AddMyEMailService的电子邮件服务来创建票证(通过向票证系统发送电子邮件)
我不知道这方面的最佳做法是什么
[编辑]解决方法是在AddMyLoggingService中创建一个临时提供程序
var tmpProvider = coll.BuildServiceProvider();
能够访问服务