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中,两个函数的行为不同: