私は2つのプロジェクトを持っています。 ProjectAにはTaskというクラスがあり、projectBにはTransmissionというクラスがあります。私は、Transmissionが変更されたときはいつでも、Taskで何かが起こり、Taskが変更されたときはいつでも、何かがTransmissionで起こるようにしたいと思います。プロジェクト間でやりとりする
私は、ProjectAとprojectBの両方に参照があるCommonという別のプロジェクトを作成しました。私はすべてのインターフェイスを両方のエンティティ間で相互作用させるのが一般的です。
共通プロジェクトでは、私はProjectAが実装するIManagerというインターフェースを作成しました。 Managerの役割は、更新を処理することです。このようなインタフェースのルック:
public interface IManager
{
ITaskChangedHandler TaskChangedHandler { set; }
void OnTransmissionChanged(ITransmissionWithTasks transmission);
}
このインタフェースはPROJECTAが実装しなければならない2つの方法があります
void OnTransmissionChanged(ITransmissionWithTasks transmission);
この方法はするために呼び出される(ProjectBの内部)送信に変更がありますタスクの更新を行います。ITaskChangedHandler TaskChangedHandler { set; }
IManagerの実装では、ITaskChangedHandlerに設定する必要があります。 ITaskChangedHandlerタスクの場合に更新伝送のための方法を定義するインタフェースが変更されている:今public interface ITaskChangedHandler { void OnTaskChanged(string moduleName, ITask task, long transmissionId); }
、それはこのように書き:
PROJECTAがiManagerのに実装されています。
私はiManagerの実装のインスタンスを受信し、これは私の問題である
OnTransmissionChanged();
を呼び出すためのStructureMapを使用して伝送におけるcahngeがある時はいつでも - (PROJECTA中)タスクに変更があるたびに私はしたいと思いますが、 IManager実装の
TaskChangedHandler.OnTaskChanged()
を呼び出します。しかし、問題は、IManager実装のインスタンスがTaskChangedHandlerを設定しないことです。
私はこのTaskChangedHandlerを設定する必要がどこにもわかりません:それはITaskChangedHandlerの実装を知らないのでこれはPROJECTAにすることはできません。
IManagerの実装がProjectAで行われるため、これはProjectBには存在しない可能性があります。そのため、projectAにセットする必要があります。
これは、IManagerとITaskChangedHandlerの実装がわからないため、共通プロジェクトにはありません。
誰もがこの問題を解決するために私を助けることができますか?
静的(または静的ではない)メディエータを使用するか、または依存性注入で両方の方法を使用する方が良いと思いますか? – Naor
もう一度考えると、この仲介者は静的でなければなりません。各プロジェクトはイベントを登録する必要があり、静的でない場合は登録するインスタンスがありません。私は正しい? – Naor
依存関係注入を介してシングルトンを使用する場合、静的である必要はありません。例えば、「Get」を取得して、同じインスタンスを元に戻すことができます。静的は私の意見ではかなり醜いです。メディエイターは、それを使用する前に登録する必要があります。つまり、タスクをITaskの実装、IT伝送のトランスミッションとして登録することができ、DIを使用して相互にアクセスできるため、DIを使用するメディエータは必要ありません。 –