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

Kla*_*msi 5 c# service dependency-injection core

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

MyBaseClass.BuildServiceProvider(serviceCollection =>
                serviceCollection
                    .AddMyConfiguration(out var config)
                    .AddMyEMailService()
                    .AddMyLoggingService(config)
            );
Run Code Online (Sandbox Code Playgroud)

问题是AddMyLoggingService,因为我不知道如何获取其他服务。我已经传入了配置,我认为这不是 DI 想要的,现在我还必须传入电子邮件服务。

日志服务看起来像这样

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在 MyTicketLoggerProvider 需要注入 .AddMyEMailService 的电子邮件服务来创建票证(通过向票证系统发送电子邮件)

我不知道什么是最佳实践。

[编辑] 一种解决方法是我在 AddMyLoggingService 中创建一个临时提供程序

var tmpProvider = coll.BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)

能够访问服务