SCSF:ログ表示用にメッセージを追加します。イベント出版物を使用して

StackOverflow https://stackoverflow.com/questions/2423411

  •  19-09-2019
  •  | 
  •  

質問

私はInfrastructure.Moduleプロジェクトに新しいビュー(ログ表示用)を作成しました。このビューは、VSで出力ウィンドウのようなLogViewerのように使用されます私は別のモジュールからこのログ表示用に異なるステータスmessagsを書きたい。

私はまた、ログ表示用にメッセージを書き込むためにイベントを公開されたクラスのログ・ライターを作成

私は私の全体のアプリケーションでこのログ・ライタークラスにアクセスするための問題に直面しています..私はこれを...使用する方法を教えてください。

public class LogWriter 
    {
        [EventPublication(EventTopicNames.WriteToLog, PublicationScope.Global)]
        public event EventHandler<EventArgs<string>> WriteToLog;

        private void OnWriteToLog(EventArgs<string> eventArgs)
        {
            if (WriteToLog != null)
            {
                WriteToLog(null, eventArgs);
            }
        }

        public void WriteMsg(string msg)
        {
            OnWriteToLog(new EventArgs<string>(msg));
        }
    }

とログ表示用にイベントサブスクリプションがある

 [EventSubscription(EventTopicNames.WriteToLog, ThreadOption.UserInterface)]
        public void OnWriteToLog(object sender, EventArgs<string> eventArgs)
        {
            this.txtLogs.AppendText(eventArgs.Data + Environment.NewLine);
        }

私の解決策を提案してください。

ログ・ライタークラスはInfrastructure.Interfaceプロジェクトであります LogViewerのはInfrastructure.Moduleプロジェクトである

Infrastructure.ModuleのModuleController.csで私はWorkItem.Servicesコレクションにログ・ライターを追加しました。

 WorkItem.Services.AddNew<LogWriter>();

と一つの他のプロジェクトで、私は使用してそれを取得しています。

VARログ・ライター= WorkItem.Services.Get()。         (ログ・ライター!= null)の場合             logWriter.WriteMsg( "メッセージ");

しかし、それは私がnullを返すされます。

モジュールロード配列も正確である。

役に立ちましたか?

解決

あなたのログ・ライタークラスにこの属性を追加

[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
    ...
}

そして、あなたのコード内で簡単にこれを行うことでそれにアクセス

var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
    logWriter.WriteMsg("message");

これは、ログ・ライターが入っているモジュールがそれにアクセスしようとする1前にロードされている必要があります。私は彼らが区切られている場合、モジュールの依存関係を追加することをお勧めします。それを行うための正確な方法は、使用しているIModuleLoaderによって異なります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top