すべての派生クラスにアクセスさせたいサービス (セキュリティ オブジェクトやリポジトリなど) を持つクラスがある場合は、次のようにします。
public abstract class A
{
static ISecurity _security;
public ISecurity Security { get { return _security; } }
public static void SetSecurity(ISecurity security) { _security = security; }
}
public class Bootstrapper
{
public Bootstrapper()
{
A.SetSecurity(new Security());
}
}
最近、絶対に避けるべきものとして、静的プロパティがどこでも避けられているのを見ているようです。私には、これは、作成するすべての派生クラスのコンストラクターに ISecurity パラメーターを追加するよりもきれいに思えます。最近読んだすべてのことを考えると、私は疑問に思っています:
これは依存性注入の許容可能なアプリケーションですか、それとも後で私を悩ませる可能性のある主要な設計原則に違反していますか? この時点で単体テストを行っていないので、そうであれば、質問に対する答えに突然気付くでしょう。正直なところ、おそらくそれ以上デザインを変更することはありませんが、変更する必要がある他の重要な理由がある場合は、変更する可能性があります.
編集:最初にそのコードを書いたときにいくつかの愚かな間違いを犯しました...それは今修正されました。誰かがたまたま気づいた場合に備えて、それを指摘したいと思いました:)
編集:SWekoは、すべての派生クラスが同じ実装を使用する必要があることについて良い点を指摘しています。この設計を使用した場合、サービスは常にシングルトンであるため、既存の要件が効果的に適用されます。当然、そうでない場合、これは悪い設計になります。