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

时间:2017-08-09 09:35:38

标签: dependency-injection asp.net-core .net-core

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

何时使用GetRequiredService()更好?

2 个答案:

答案 0 :(得分:72)

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

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

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

另一方面

GetService用于可选依赖项,当没有注册此类服务时,它将返回null

答案 1 :(得分:35)

不同之处在于GetService<T>()如果无法找到服务,则会返回nullGetRequiredService<T>()会引发InvalidOperationException