我在Infrastructure.Module项目中创建了一个新的View(LogView)。此视图将用作VS中的LogViewer,如输出窗口。我想在不同模块的LogView中编写不同的状态消息。
我还创建了一个LogWriter类,它发布一个事件以将消息写入LogView
我在整个应用程序中访问此LogWriter类时遇到问题..请告诉我如何使用此...
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));
}
}
并且在LogView事件订阅中
[EventSubscription(EventTopicNames.WriteToLog, ThreadOption.UserInterface)]
public void OnWriteToLog(object sender, EventArgs<string> eventArgs)
{
this.txtLogs.AppendText(eventArgs.Data + Environment.NewLine);
}
请建议我一个解决方案
LogWriter类位于Infrastructure.Interface项目中 LogViewer位于Infrastructure.Module项目中
在Infrastructure.Module的ModuleController.cs中,我在WorkItem.Services集合中添加了LogWriter
WorkItem.Services.AddNew<LogWriter>();
在另一个项目中我正在使用
var logWriter = WorkItem.Services.Get(); if(logWriter!= null) logWriter.WriteMsg( “消息”);
但是它返回null。
模块加载顺序也正确。
答案 0 :(得分:0)
将此属性添加到LogWriter类
[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
...
}
然后在您的代码中通过执行以下操作来访问它:
var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
logWriter.WriteMsg("message");
这将要求LogWriter所在的模块在尝试访问它的模块之前加载。如果它们是分开的,我建议添加一个模块依赖项。确切的方法取决于您使用的IModuleLoader。