SCSF: Anexar mensagens em LogView. usando publicação Evento
Pergunta
Eu criei uma nova View (LogView) em projeto Infrastructure.Module. Esta visão será usado como LogViewer como a janela de saída no VS. eu quero escrever diferentes messags estado neste LogView a partir de módulos diferentes.
Eu também criou um LogWriter classe que está publicando um evento para mensagem escrita em LogView
eu estou enfrentando problema para acessar essa classe LogWriter em toda a minha aplicação .. por favor me dizer como posso usar isso ...
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 em LogView evento subscrição é
[EventSubscription(EventTopicNames.WriteToLog, ThreadOption.UserInterface)]
public void OnWriteToLog(object sender, EventArgs<string> eventArgs)
{
this.txtLogs.AppendText(eventArgs.Data + Environment.NewLine);
}
por favor me sugerir uma solução
classe LogWriter está em projeto Infrastructure.Interface LogViewer está em projeto Infrastructure.Module
Em ModuleController.cs de Infrastructure.Module eu adicionei LogWriter em WorkItem.Services Collection
WorkItem.Services.AddNew<LogWriter>();
e em um outro projeto eu estou recebendo-lo usando
= var logWriter WorkItem.Services.Get (); if (logWriter! = null) logWriter.WriteMsg ( "mensagem");
mas ele está retornando me null.
sequência módulo de carga também é correcta.
Solução
Adicione este atributo para sua classe LogWriter
[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
...
}
, em seguida, em seu código simplesmente acessá-lo, fazendo isso:
var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
logWriter.WriteMsg("message");
Isso vai exigir que o módulo que o LogWriter é é carregado antes do que tentar acessá-lo. Eu recomendaria adicionando uma dependência módulo se eles são separados. A maneira exata de fazer isso depende da IModuleLoader você está usando.