グローバルにアクセス可能なインスタンスが必要なクラスがあります。私が抱えていたデータバインディングの問題のため、静的にしないことをお勧めします。シングルトンパターンも避けたいです。静的プロパティを持つ IOC コンテナーを使用してみましたが、これらにもデータバインディングの問題があります。では、を使用せずにグローバルなアクセシビリティを実現することは可能static
ですか? もしそうなら、どうすればそのようなソリューションを実装できますか?
2 に答える
まず第一に、グローバルにアクセス可能なクラスが必要な場合は、設計に問題がある可能性が高いことをお勧めします。結合を減らすのに役立つため、アプリケーションのすべての側面の範囲を最小限に抑えるように努める必要があります。したがって、可能であれば、アプリケーションを再構築して、このクラスに依存する領域の数を最小限に抑えることを検討する必要があります。
次に、アクセスされる項目に変更可能な状態や副作用がない場合を除き、シングルトンと静的アクセスを避けるべきものとして特定するのは正しいことです。「データバインディングの問題」についてのあなたの話は、副作用があることを示唆しているため、ここで正しい軌道に乗っています。
ある種のロケーター パターン (静的またはシングルトンなど) を使用しない場合は、アクセスが必要なアプリケーションの側面全体に値を注入することが唯一の方法です。ここで IoC コンテナーの使用を検討できますが、それがあなたの場合に役立つかどうかはわかりません。他のクラスのコンストラクターでクラスのインスタンスを要求するだけで DI モデルになるため、DI ソリューションを実現するために IoC コンテナーは必要ありません。
ただし、最初のポイントを強調します。クラスをグローバルにアクセス可能にする方法を探すのではなく、コード全体でクラスへのアクセスの必要性を最小限に抑えるようにします。
はい。依存性注入を使用します。
windsor、Unity、簡易インジェクターなど
チュートリアル: http://msdn.microsoft.com/en-us/library/ff921152.aspx 依存性注入を正しく使用する