SCSF:Accodamento Messaggi in LogView.mediante la pubblicazione di Eventi

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

  •  19-09-2019
  •  | 
  •  

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top