在IServiceCollection.AddLogging(C#/.net核心)中获取服务

在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()

在我的.net核心C#应用程序(不是ASP)中,我构建了一个类来处理我的服务。您必须这样配置它

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();
能够访问服务