题
我创建了Infrastructure.Module项目中的新景观(日志查看)。此视图将被用作LogViewer的像在VS.输出窗口我想写入来自不同模块的这个日志查看不同状态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>();
和在一个其他项目,我使用得到它
变种日志写= WorkItem.Services.Get(); 如果(日志写!= NULL) logWriter.WriteMsg( “消息”);
但它返回箱为空。
模块装载顺序也是正确的。
解决方案
此属性添加到您的日志写类
[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
...
}
然后在代码中通过简单地这样做访问:
var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
logWriter.WriteMsg("message");
这将要求该日志写进程是在该模块试图访问它的一个之前加载。我会建议增加一个模块依赖,如果他们分隔。做到这一点的确切方式取决于您所使用的IModuleLoader。
不隶属于 StackOverflow