是否可以在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();