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

Dependency injection 在IServiceProvider上,GetRequiredService和GetService方法之间有什么区别?,dependency-injection,asp.net-core,.net-core,Dependency Injection,Asp.net Core,.net Core,IServiceProvider.GetRequiredService()和IServiceProvider.GetService()之间有什么区别 什么时候使用GetRequiredService()更好 区别在于GetService()如果找不到服务,则返回nullGetRequiredService()抛出一个InvalidOperationException。您应该很少调用这些方法,因为您应该尽可能使用构造函数注入 在极少数情况下,如工厂或动态实例化命令处理程序,您可以自己解决 也就是说

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


什么时候使用
GetRequiredService()
更好

区别在于
GetService()
如果找不到服务,则返回
null
GetRequiredService()
抛出一个
InvalidOperationException

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

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

也就是说,您应该在需要服务的地方使用
GetRequiredService
。当服务未注册时,它将抛出异常


另一端的
GetService
用于可选的依赖项,当没有注册此类服务时,它只会返回
null

您应该注意,如果您使用的是外部DI提供程序,此语义可能会有一些变化,例如,在StructureMap中,两个函数的行为不同: