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中的变量描述符)
{
添加(描述符);
}