SCSF: Anhängen Nachrichten in LogView. mit der Ereignis Veröffentlichung

StackOverflow https://stackoverflow.com/questions/2423411

  •  19-09-2019
  •  | 
  •  

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top