C# Microsoft DependencyInjection:ServiceProviderFactory不';你不能按预期工作吗?

C# Microsoft DependencyInjection:ServiceProviderFactory不';你不能按预期工作吗?,c#,dependency-injection,C#,Dependency Injection,请检查以下代码 using Microsoft.Extensions.DependencyInjection; IServiceProviderFactory<IServiceCollection> serviceProviderFactory = new DefaultServiceProviderFactory(new ServiceProviderOptions { ValidateOnBuild = true, ValidateSco

请检查以下代码

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);
使用Microsoft.Extensions.DependencyInjection;
IServiceProviderFactory服务ProviderFactory=
新建DefaultServiceProviderFactory(新建ServiceProviderOptions{
ValidateOnBuild=true,
ValidateScopes=true
});
IServiceCollection oldServiceCollection=新ServiceCollection();
IServiceCollection新闻服务收集=
serviceProviderFactory.CreateBuilder(旧ServiceCollection);
IsTrue(oldServiceCollection==newServiceCollection);
我想在
oldServiceCollection
的基础上创建一个
newServiceCollection
(然后修改
newServiceCollection
)。然而(令人惊讶的是)
ServiceProviderFactory
,尽管是一个带有“Create..”方法的“工厂”,但它没有创建任何东西

newServiceCollection
oldServiceCollection
。(如果我修改了
newServiceCollection
,则
oldServiceCollection
也将被修改)

我认为“DefaultServiceProviderFactory”(微软的)在这里是错误的,有谁知道更好的实现可以帮助我克隆
oldServiceCollection
来创建
newServiceCollection

这是。
DefaultServiceProviderFactory
没有用处,只存在于其他DI容器中,用于拦截
IServiceCollection
实例的创建

要创建副本,您必须迭代旧集合并将所有ServiceDescriptor添加到新集合:

var newServiceCollection=newServiceCollection();
foreach(oldServiceCollection中的变量描述符)
{
添加(描述符);
}
这是一个。
DefaultServiceProviderFactory
没有用处,只存在于其他DI容器中,用于拦截
IServiceCollection
实例的创建

要创建副本,您必须迭代旧集合并将所有ServiceDescriptor添加到新集合:

var newServiceCollection=newServiceCollection();
foreach(oldServiceCollection中的变量描述符)
{
添加(描述符);
}