ServiceProviderオブジェクトの GetService, GetRequiredService メソッドの違い - C#

ServiceProviderオブジェクトのGetService<T>(), GetRequiredService<T>() メソッドの違いを紹介します。

概要

ServiceProviderオブジェクトからインスタンスを生成するメソッドとして以下のメソッドが用意されています。
  • ServiceProvider.GetService()
  • ServiceProvider.GetService<T>()
  • ServiceProvider.GetRequiredService()
  • ServiceProvider.GetRequiredService<T>()
  • ServiceProvider.GetServices()
  • ServiceProvider.GetServices<T>()

基本的には指定したオブジェクトタイプのインスタンスを作成しますが、挙動やパラメーターの与え方が微妙に違います。

ServiceProvider.GetService() メソッド

GetServiceメソッドは第一引数に与えたタイプのインスタンスオブジェクトを作成します。タイプを与えるため、typeof 演算子を利用します。
インスタンスが生成できなかった場合は戻り値にnullが返ります。
記述例
  FormMain form = (FormMain)serviceProvider.GetService(typeof(FormMain));

ServiceProvider.GetService<T>() メソッド

GetService<T>メソッドはTに与えたタイプのインスタンスオブジェクトを作成します。
インスタンスが生成できなかった場合は戻り値にnullが返ります。
記述例
  FormMain form = (FormMain)serviceProvider.GetService<FormMain>();

ServiceProvider.GetRequiredService() メソッド

GetRequiredServiceメソッドは第一引数に与えたタイプのインスタンスオブジェクトを作成します。タイプを与えるため、typeof 演算子を利用します。
インスタンスが生成できなかった場合はInvalidOperationException例外が発生します。
記述例
  FormMain form = (FormMain)serviceProvider.GetRequiredService(typeof(FormMain));

ServiceProvider.GetRequiredService<T>() メソッド

GetRequiredService<T>メソッドはTに与えたタイプのインスタンスオブジェクトを作成します。
インスタンスが生成できなかった場合はInvalidOperationException例外が発生します。
記述例
  FormMain form = (FormMain)serviceProvider.GetRequiredService<FormMain>();

ServiceProvider.GetServices() メソッド

GetServicesメソッドは第一引数に与えたタイプのインスタンスオブジェクトの列挙を作成します。タイプを与えるため、typeof 演算子を利用します。

ServiceProvider.GetServices<T>() メソッド

GetServices<T>メソッドはTに与えたタイプのインスタンスオブジェクトの列挙を作成します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2021-08-14
iPentec all rights reserverd.