是否可以在IServiceProvider中使用IServiceCollection.Configure()

我看不到Configure()接受类似>之类的任何内容。其他扩展方法(例如Func<IServiceProvider, T)具有接受IServiceCollection.AddScoped()的重载。

我想做这样的事情:

public static void AddCommandHandlers(this IServiceCollection services, Assembly assembly)
{
    // CommandExecutor has a dependency on CommandHandlerFactory
    services.AddScoped<CommandExecutor>();

    services.Configure<CommandHandlerFactory>(myFactory =>
    {
        // How can I use IServiceProvider here? Example scenario:

        foreach(Type t in FindHandlers(assembly))
            myFactory.AddHandler(serviceProvider => serviceProvider.GetService(t));
    });
}


目标是能够针对不同的程序集多次调用Func<IServiceProvider, T>扩展方法,并将找到的处理程序(使用DI)附加到同一AddCommandHandlers,以便CommandHandlerFactory可以仅调用工厂来获取处理程序。

也许还有另一种方法?

任何帮助表示赞赏。
谢谢。

最佳答案

您可以随时在IServiceCollection上调用BuildServiceProvider()扩展方法来构建ServiceProvider。你需要
Microsoft.Extensions.DependencyInjection

显然,它将仅包括已经添加到集合中的任何服务,因此您需要以正确的顺序调用事物。

IServiceProvider sp = services.BuildServiceProvider();

09-30 00:15