2016-11-06 4 views
0

同じソリューションで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); 
} 

答えて

1

あなたにプロジェクト参照を追加私が前提とするコンソールアプリからのWebアプリ?これはうまくいきません。あなたはそれを正しく述べました。おそらく2つのインスタンスがあります。どちらも独自のプロセスで実行されており、メッセージングを使用してそれらの間で通信する必要があります。

これは、SlackMessageSpyを使用して、Webアプリケーションとコンソールアプリケーションの間の結合が非常に緊密です。たとえば、SignalRhttps://www.asp.net/signalr)やWebhookshttps://docs.asp.net/projects/webhooks/en/latest/overview.html)などのメッセージングコンポーネントを使用して、これらのイベントを切り離す必要があります。コントローラーはSignalRメッセージを送信するか、Webhookを呼び出し、コンソールアプリケーションはこのメッセージを購読します。

コントローラに、コンソールアプリケーションがアクセスできる場所に情報を含む小さなファイルを書き込んで、コンソールアプリケーションでそれらのファイルを読み取らせるようにするのは簡単です。

+0

あなたは正しいです。もっと掘り下げた後、プロジェクト/プロセスで2つのシングルトンオブジェクトを使用していることが分かりました。私は名前付きパイプを使用して、必要なデータを送信しました。そして、プロジェクトカップリングのブレーキングに関する助言に感謝します。 –

関連する問題