同じソリューションで2つのプロジェクトがあります。 1つはASP.NET MVCアプリケーション(A)で、もう1つはコンソールアプリケーション(C)です。私はCがAのコントローラによって提起されるイベントを購読したいと思う。私はイベントを発生させ、イベントを購読することができるシングルトンクラスを使用している。他のプロジェクトのコントローラーが発行したイベントを購読する
私はイベントに登録し、サブスクリプションが実際に格納されていることを確認し(デバッガを使用して)、イベントが適切なタイミングで発生したことを確認できます。
私はこれらのプロジェクトを一緒に使用して起動時に問題が発生した - Cがイベントをサブスクライブするにもかかわらず、Aが上昇したときにイベントがC.
それにcoughtされていないので、それはサブスクリプションは、EventHandlerのリスナーリストに含まれていません私のシングルトンが範囲外になるか、同じインスタンスがプロジェクト間で使用されないようなものです。私はちょうど私が私のシングルトンの2つのインスタンスを持っているの充填を取得します。
私の目標は、別のプロジェクトのコントローラからイベントを受け取ることです。シングルトンクラスは、必要でない場合は避けることができます。
何か助けていただければ幸いです。 (プロジェクトAで)
コントローラ
[HttpPost]
public void ProcessCommandMessage(Message message)
{
MessageSpy.Instance.OnMessageReceived(message);
}
MessageSpy(プロジェクトA)に
{
private static readonly MessageSpy _instance = new MessageSpy();
public static MessageSpy Instance { get { return _instance; } }
static MessageSpy() { }
private MessageSpy() { }
public event EventHandler<Message> MessageReceived;
public virtual void OnMessageReceived(Message message)
{
if (MessageReceived != null)
{
MessageReceived(this, message);
}
}
}
(プロジェクトCにおいて)加入者
private void Run()
{
SlackMessageSpy.Instance.MessageReceived += Instance_MessageReceived;
}
static void Instance_MessageReceived(object sender, OutgoingHookMessage e)
{
Trace.WriteLine(e.Text);
}
あなたは正しいです。もっと掘り下げた後、プロジェクト/プロセスで2つのシングルトンオブジェクトを使用していることが分かりました。私は名前付きパイプを使用して、必要なデータを送信しました。そして、プロジェクトカップリングのブレーキングに関する助言に感謝します。 –