SCSF:ログ表示用にメッセージを追加します。イベント出版物を使用して
質問
私は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によって異なります。