1

我在 Infrastructure.Module 项目中创建了一个新视图(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("message");

但它让我返回null。

模块加载顺序也是正确的。

4

1 回答 1

0

将此属性添加到您的 LogWriter 类

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

然后在您的代码中只需执行以下操作即可访问它:

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

这将要求在尝试访问它的模块之前加载 LogWriter 所在的模块。如果它们是分开的,我建议添加一个模块依赖项。执行此操作的确切方法取决于您使用的 IModuleLoader。

于 2010-03-11T08:14:39.970 回答