SCSF: Anhängen Nachrichten in LogView. mit der Ereignis Veröffentlichung
Frage
habe ich eine neue Ansicht (LogView) in Infrastructure.Module Projekt. Diese Ansicht wird als LogViewer wie Ausgabefenster in VS. verwendet werden Ich will verschiedenen Status messags in diesem LogView aus verschiedenen Modulen schreiben.
Ich habe auch eine Klasse LogWriter, die ein Ereignis veröffentlicht Nachricht in LogView schreiben
Ich bin vor Problem dieser LogWriter Klasse in meiner ganzen Anwendung zuzugreifen .. Bitte sagen Sie mir, wie ich dies verwenden kann ...
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));
}
}
und in LogView Ereignisabonnement ist
[EventSubscription(EventTopicNames.WriteToLog, ThreadOption.UserInterface)]
public void OnWriteToLog(object sender, EventArgs<string> eventArgs)
{
this.txtLogs.AppendText(eventArgs.Data + Environment.NewLine);
}
Bitte machen Sie mir eine Lösung
LogWriter Klasse ist in Infrastructure.Interface Projekt LogViewer ist in Infrastructure.Module Projekt
In ModuleController.cs von Infrastructure.Module i Hinzugefügt LogWriter in WorkItem.Services Collection
WorkItem.Services.AddNew<LogWriter>();
und in einem anderen Projekt ich erhalte es mit
var LogWriter = WorkItem.Services.Get (); if (LogWriter! = null) logWriter.WriteMsg ( "message");
, aber es kehrt mich null.
Modul-Ladesequenz ist auch richtig.
Lösung
Dieses Attribut auf Ihre LogWriter Klasse
[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
...
}
dann in Ihrem Code einfach darauf zugreifen, indem Sie diese:
var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
logWriter.WriteMsg("message");
Dies erfordert, dass das Modul, das die LogWriter in vor dem einem geladen wird, ist, dass es für den Zugriff versucht. Ich würde empfehlen, ein Modul Abhängigkeit hinzufügen, wenn sie getrennt sind. Die genaue Art und Weise es hängt von dem IModuleLoader zu tun, die Sie verwenden.