2017-08-09 28 views

回答

28

您應該很少需要調用這些方法,因爲您應該儘可能使用構造函數注入。

在極少數情況下,例如工廠或動態實例化命令處理程序,您可以自己解決它。

也就是說,你應該使用GetRequiredService需要服務。當服務未註冊時,它會拋出異常。

另一邊GetService可選的依賴,這將直接返回null時,有註冊沒有這樣的服務。

+0

您應該注意,如果您使用的是外部DI提供程序,則此語義可能會發生一些變化,例如,在StructureMap中,這兩種函數的行爲都不相同:https://github.com/structuremap/StructureMap.Microsoft.DependencyInjection/issues/37 – rekiem87

11

區別在於GetService<T>()返回null如果找不到服務。 GetRequiredService<T>()改爲拋出InvalidOperationException