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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top