web-dev-qa-db-ja.com

IServiceProviderでは、GetRequiredServiceメソッドとGetServiceメソッドの違いは何ですか?

IServiceProvider.GetRequiredService()IServiceProvider.GetService()の違いは何ですか?

いつGetRequiredService()を使用するほうが良いでしょうか?

54
Art Base

可能な限りコンストラクター注入を使用する必要があるため、これらのメソッドを呼び出す必要はほとんどありません。

工場などのまれなケースや、コマンドハンドラーを動的にインスタンス化する場合は、自分で解決できます。

そうは言っても、必須サービスの場合はGetRequiredServiceを使用する必要があります。サービスが登録されていない場合、例外をスローします。

反対側のGetServiceは、オプション依存関係用です。依存関係は、そのようなサービスが登録されていない場合にnullを返すだけです。

74
Tseng

違いは、サービスが見つからない場合、GetService<T>()nullを返すことです。 GetRequiredService<T>()は代わりにInvalidOperationExceptionをスローします。

36
tchelidze