C# 如何创建IServiceCollection中AddScope/Transient/Singleton中的服务提供者?Can';t解析以前添加的服务

C# 如何创建IServiceCollection中AddScope/Transient/Singleton中的服务提供者?Can';t解析以前添加的服务,c#,.net-core,C#,.net Core,我正在向IServiceCollection添加服务。我想使用一个已在factory方法中添加到集合中的服务作为另一个服务。 使用AddScoped(可能与AddTransient和AddSingleton相同,但我使用Scoped)方法提供Func作为参数,IServiceProvider无法解析已添加到IServiceCollection的服务 如前所述,我最初尝试使用自动提供到该方法中的IServiceProvider来使用implementationFactory方法。当试图解析我在代码

我正在向IServiceCollection添加服务。我想使用一个已在factory方法中添加到集合中的服务作为另一个服务。 使用AddScoped(可能与
AddTransient
AddSingleton
相同,但我使用Scoped)方法提供
Func
作为参数,
IServiceProvider
无法解析已添加到
IServiceCollection
的服务

如前所述,我最初尝试使用自动提供到该方法中的
IServiceProvider
来使用
implementationFactory
方法。当试图解析我在代码中已注册的较高级别的服务时,此
IServiceProvider
引发异常

在搜索了一段时间后,我在
IServiceCollection
-
BuildServiceProvider()
上发现了一个扩展方法。使用此方法生成的服务提供程序可以成功解析服务。那么,这与传递到实现工厂方法的IServiceProvider有什么不同呢

//下面的代码在尝试解析时引发异常。
//注意,它成功地解析了接口
public void配置服务(IServiceCollection服务)
{
services.addScope();
AddScoped(typeof(ISomeGeneric),typeof(SomeGeneric));
services.AddScoped(serviceProvider=>newthingtoresolve(serviceProvider.GetRequiredService(),serviceProvider.GetRequiredService());
}
//下面是我最终实现的解决方案
public void配置服务(IServiceCollection服务)
{
services.addScope();
AddScoped(typeof(ISomeGeneric),typeof(SomeGeneric));
var serviceProvider=services.BuildServiceProvider();
services.AddScoped(spThatIsNotUsed=>newThingToResolve(serviceProvider.GetRequiredService(),serviceProvider.GetRequiredService());
}
引发的错误是
无法从根提供程序解析作用域服务“ISomeGeneric`1[SomeType]”。


如上所述,即使使用此方法,
ISomeInterface
服务也会被解析,因此我无法理解为什么我的所有服务都不包含在此服务提供商中

为什么使用
services.AddScoped();
而不是
services.AddScoped())
其中
SomeImplementation
实现
ISomeInterface
?感谢您指出这一点,这只是问题中的一个错误。现在编辑
services.AddScoped(typeof(ISomeGeneric),typeof(SomeGeneric);
看起来末尾缺少一个括号。