Microsoft DependencyInjection:ServiceProviderFactory无法按预期工作吗?

时间:2020-11-04 17:46:18

标签: c# dependency-injection

请签出以下代码

using Microsoft.Extensions.DependencyInjection;

IServiceProviderFactory<IServiceCollection> serviceProviderFactory =
    new DefaultServiceProviderFactory(new ServiceProviderOptions {
        ValidateOnBuild = true,
        ValidateScopes = true
    });
IServiceCollection oldServiceCollection = new ServiceCollection();
IServiceCollection newServiceCollection =
    serviceProviderFactory.CreateBuilder(oldServiceCollection);
Assert.IsTrue(oldServiceCollection == newServiceCollection);

我想在newServiceCollection的基础上创建oldServiceCollection(然后修改newServiceCollection)。但是,ServiceProviderFactory令人惊讶(尽管是一个带有“创建..”方法的“工厂”),却没有创建任何东西……

newServiceCollectionoldServiceCollection。 (如果我修改了newServiceCollection,那么oldServiceCollection也将被修改。)

我认为(Microsoft的)“ DefaultServiceProviderFactory”存在问题,有人知道更好的实现可以帮助我克隆oldServiceCollection来制作newServiceCollection吗?

1 个答案:

答案 0 :(得分:2)

这是by designString没什么用,只有其他DI容器才能拦截DefaultServiceProviderFactory实例的创建。

要进行复制,您必须迭代旧集合并将所有ServiceDescriptor添加到新集合:

IServiceCollection