ServiceLocator
ヘルパークラスは静的であるため、スタイルを使用し、ヘルパークラスに挿入された値自体を取得させない限り、DIを使用することはできません。次のようになります。
public static class HelperClass
{
static HelperClass()
{
var config = ServiceLocator.Get<IConfig>();
UserId = config.Get("UserId");
}
public static int UserId { get; private set; }
}
ヘルパークラスは、を含むServiceLocator
で設定されていることに隠れた依存関係があるため、これは良い習慣とは見なされません。IConfig
UserId
したがって、ヘルパークラスを非静的に変更し、次のように、IConfig
必要なものをコンストラクターを介して注入することをお勧めします。
public class HelperClass
{
public HelperClass(IConfig config)
{
UserId = config.Get("UserId");
}
public int UserId { get; private set; }
}
次に、次のように、コンストラクターHelperClass
を介してサービスクラスにを挿入できます。
public class ServiceClass
{
private readonly HelperClass _helperClass;
public ServiceClass(HelperClass helperClass)
{
_helperClass = helperClass;
}
}
このようにして、必要に応じて各コンポーネントを交換、スタブ、またはモックすることができます。HelperClass
独自の状態がない場合は、シングルトンライフタイムで管理するようにDIコンテナーを構成できます。これにより、基本的に「静的」になり、欠点はありません。