Pregunta

He creado una nueva vista (LogView) en el proyecto Infrastructure.Module. Este punto de vista se utilizará como LogViewer como ventana de salida en VS. Quiero escribir diferentes messags estado en este LogView de diferentes módulos.

También creé una LogWriter clase que está publicando un evento para escribir el mensaje en LogView

estoy frente a un problema para acceder a esta clase LogWriter en toda mi aplicación .. por favor dígame cómo puedo usar esto ...

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));
        }
    }

y en LogView suscripción de evento es

 [EventSubscription(EventTopicNames.WriteToLog, ThreadOption.UserInterface)]
        public void OnWriteToLog(object sender, EventArgs<string> eventArgs)
        {
            this.txtLogs.AppendText(eventArgs.Data + Environment.NewLine);
        }

Por favor, me sugieren una solución

clase LogWriter está en proyecto Infrastructure.Interface LogViewer está en proyecto Infrastructure.Module

En ModuleController.cs de Infrastructure.Module añadí LogWriter en WorkItem.Services Colección

 WorkItem.Services.AddNew<LogWriter>();

y en otro proyecto que estoy recibiendo utilizando

var logWriter = WorkItem.Services.Get ();         si (logWriter! = null)             logWriter.WriteMsg ( "mensaje");

pero me está volviendo nula.

secuencia módulo de carga también es correcta.

¿Fue útil?

Solución

Añadir este atributo a la clase LogWriter

[Service(typeof(LogWriter), AddOnDemand=true)]
public class LogWriter
{
    ...
}

A continuación, en su código simplemente acceder a él al hacer esto:

var logWriter = WorkItem.Service.Get<LogWriter>();
if (logWriter != null)
    logWriter.WriteMsg("message");

Esto requerirá que el módulo que el LogWriter está en se carga antes de la que intenta acceder a él. Yo recomendaría la adición de un módulo de dependencia si están separados. La forma exacta de hacerlo depende de la IModuleLoader que está utilizando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top