如何使用ServiceProvider构建ServiceCollection?

Dbl*_*Dbl 0 c# dependency-injection

我正在使用此方法构建服务实现:

样本图片

我正在使用Microsoft.Extensions.DependencyInjection并试图实现以下目标:

  • 创建本地ServiceCollection并保持原始ServiceProvider(和基础ServiceCollection)不变
  • 将当前类型(TViewModel)注册到本地ServiceCollection
  • 将父IServiceProvider(从另一个ServiceCollection构建)提供的所有服务添加到本地ServiceCollection。
  • 使用本地ServiceCollection创建本地ServiceProvider,该服务提供商可以提供我当前正在执行的类型的实例。

我在这里疯了吗?对我来说,我似乎在这里做些奇怪的事情,因为它不存在用于从另一个ServiceProvider初始化ServiceCollection的API。

注意

我不想在原始ServiceCollection上运行serviceCollection.AddX。

Nko*_*osi 5

如何使用ServiceProvider构建ServiceCollection?

简短答案:您不能开箱即用

构建服务提供者后,对服务集合的任何更改都不会对提供者产生影响。

ServiceProvider最终生成的类没有公开任何方法来获取用于构建它的集合。

如果对原始集合进行了修改,我建议您只保留原始集合的引用并根据需要构建新的提供程序。

否则,您将需要创建自己的 IServiceProviderFactory<TContainerBuilder>

提供用于创建特定于容器的构建器的扩展点和IServiceProvider

拥有您想要的功能。