2010-03-11 59 views
1

我在Infrastructure.Module項目中創建了一個新的View(LogView)。這個視圖將被用作VS中的輸出窗口的LogViewer。我想在不同模塊的LogView中寫入不同的狀態信息。SCSF:將消息追加到LogView中。使用事件發佈

我還創建了一個類日誌寫其發佈事件寫消息到日誌查看

我面臨的問題來訪問我的整個應用這個日誌寫類..請告訴我如何可以使用此...

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 logWriter = WorkItem.Services.Get(); if(logWriter!= null) logWriter.WriteMsg(「message」);

但它返回null。

模塊加載順序也是正確的。

回答

0

這個屬性添加到您的日誌寫類

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

然後在你的代碼只需做這個訪問:

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

這將要求該模塊的日誌寫在裝入前試圖訪問它的那個。如果他們分開,我會建議添加一個模塊依賴項。確切的方式取決於您使用的IModuleLoader。

+0

對於事件訂閱,請確保您的View是BuiltUp或添加到WorkItem(SmartParts或Items)的ObjectCollections之一。 –

+0

line var logWriter = WorkItem.Service.Get ();總是返回null – Mohsan

+0

是與ModuleInit類相同的程序集中的LogWriter類? –

相關問題