我创建了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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top