请签出以下代码
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
令人惊讶(尽管是一个带有“创建..”方法的“工厂”),却没有创建任何东西……
newServiceCollection
是oldServiceCollection
。 (如果我修改了newServiceCollection
,那么oldServiceCollection
也将被修改。)
我认为(Microsoft的)“ DefaultServiceProviderFactory”存在问题,有人知道更好的实现可以帮助我克隆oldServiceCollection
来制作newServiceCollection
吗?
答案 0 :(得分:2)
这是by design。 String
没什么用,只有其他DI容器才能拦截DefaultServiceProviderFactory
实例的创建。
要进行复制,您必须迭代旧集合并将所有ServiceDescriptor添加到新集合:
IServiceCollection