在IServiceProvider上,GetRequiredService和GetService方法之间有什么区别?

Art*_*ase 56 dependency-injection .net-core asp.net-core

IServiceProvider.GetRequiredService()和之间有什么区别IServiceProvider.GetService()

什么时候使用它更好GetRequiredService()

Tse*_*eng 75

你应该很少调用这些方法,因为你应该尽可能使用构造函数注入.

在极少数情况下,例如工厂或动态实例化命令处理程序,您可以自己解决它.

话虽如此,您应该使用GetRequiredService需要服务的地方.当服务未注册时,它将抛出异常.

GetService另一方面是可选的依赖项,只有null在没有注册此类服务时才会返回.

  • 您应该注意,如果您使用外部 DI 提供程序,则此语义可能会发生一些变化,例如,在 StructureMap 中,两个函数的行为不同:https://github.com/structuremap/StructureMap.Microsoft.DependencyInjection/issues/37 (2认同)

tch*_*dze 37

不同之处在于,如果找不到服务则GetService<T>()返回null.GetRequiredService<T>()抛出一个InvalidOperationException而不是.