2017-06-13 4 views
0

私の現在のアプリケーションでは、オブザーバパターンを実装するために 'selfmade' Observableクラスを使用しています。オブザーバー(インターフェースを実装する)は、特定のイベントを聴くことができます。IoCコンテナを使用する際にオブザーバーを登録する場所は?

私はIoCコンテナを使用するようにプロジェクトをますます切り替えていますが、オブザーバをオブザーバブルに登録するのにコード内に適切な場所を見つけることができません。

私が見るこれを行う方法は次のとおりです。

A)観測者に観測可能に注入します。
コンストラクタは実際の作業を行うべきではありませんが、メソッド注入またはフィールド注入を行っても、オブザーバを観測可能なものに結合します。これは逆の場合も同様です。

B)観測可能なファクトリを作成し、それを実行します。
この場合、observableの作成は、いくつかのオブザーバの実装に依存します。

C)ファクトリでオブザーバを作成し、そこに作成します。
カップリングに関してはこれが最善のようですが、DRYに関しては悪いことが分かります。いくつかのケースでは、工場はオブザーバーのフィールドとコンストラクターのコピーであり、オブザーバーブルと登録のための1行のコードが追加されています。

この登録をきれいに処理する方法はありますか?そうでない場合は、他のものよりも特定の方法を使用する説得力のある議論がありますか?

答えて

0

解決策は、Resolve()メソッドとInstantiate()メソッドの違いを発見していました。

私は常にResolve()を使用していました。それで、コンテナに拘束されている方法でObserverを受け取ります。

ただし、Instantiate()は、クラスがコンテナにどのようにバインドされているか気にしません。クラスを標準的な方法で作成しますが、依然として依存関係を注入します。これは、工場内でオブザーバーに使用することができます。

関連する問題