SCSF:Accodamento Messaggi in LogView.mediante la pubblicazione di Eventi
Domanda
Ho creato una nuova Vista (LogView) in Infrastrutture.Modulo di progetto.Questo punto di vista sarà utilizzato come LogViewer come finestra di output in VS.voglio scrivere uno status diverso messags in questo LogView da diversi moduli.
Ho anche creato una classe LogWriter che è la pubblicazione di un evento a scrivere il messaggio in LogView
io sto affrontando un problema per accedere a questo LogWriter classe in tutta la mia applicazione..la prego di dirmi come posso usare questo...
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));
}
}
e in LogView caso di sottoscrizione è
[EventSubscription(EventTopicNames.WriteToLog, ThreadOption.UserInterface)]
public void OnWriteToLog(object sender, EventArgs<string> eventArgs)
{
this.txtLogs.AppendText(eventArgs.Data + Environment.NewLine);
}
per favore mi suggerisce una soluzione
LogWriter classe è in Infrastrutture.Interfaccia di progetto LogViewer è in Infrastrutture.Modulo di progetto
In ModuleController.cs di Infrastrutture.Modulo ho Aggiunto LogWriter in WorkItem.Servizi Di Raccolta
WorkItem.Services.AddNew<LogWriter>();
e in un altro progetto che io sto utilizzando
var logWriter = WorkItem.Servizi.Get();se (logWriter != null) logWriter.WriteMsg("messaggio");
ma mi restituisce null.
il caricamento del modulo sequenza è corretta.
Soluzione
Aggiungere questo attributo a LogWriter classe
[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
...
}
poi nel codice semplicemente accedere a questo in questo modo:
var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
logWriter.WriteMsg("message");
Questo richiede che il Modulo che LogWriter si è caricato prima di quello che tenta di accedervi.Vorrei raccomandare l'aggiunta di un modulo di dipendenza se sono separati.Il modo esatto per farlo dipende dal IModuleLoader si sta utilizzando.