0

Unity アプリケーション ブロックを単純なサービス ロケーターとして使用しています。

次のように単純なオブジェクトを登録しています。

_serviceContainer.RegisterType<ISessionManager, SessionManager>();

ISessionManager を指定するだけで、アプリケーションの他の場所でその登録を再登録したいと思います。そうすれば、インターフェイス実装ロジックがアプリケーション全体に分散することはありません。

4

1 に答える 1

1

Unity を Service Locator として悪用しないでください。ServiceLocator は、最新のソフトウェア アーキテクチャのアンチパターンと見なされます。

アプリケーションの複数の場所にマッピングを登録しないでください。アプリケーションには、依存関係コンテナーを接続してアプリケーションのメイン オブジェクトを解決する単一のコンポジション ルートが必要です。コンテナーは、コンポジション ルートの外部にあるアプリケーションのコードに表示されるべきではありません。

アーキテクチャをそのまま維持することを主張する場合:

_serviceContainer.RegisterInstance<ISessionManager>(mySessionManagerObject);

登録を上書きする必要があります。ただし、アプリケーションの実行時にその依存関係を再登録すると、アプリケーションの他の部分に影響を与える可能性があることに注意してください。

于 2012-10-23T07:17:36.340 に答える