SCSF: Messages dans Append LogView. en utilisant la publication de l'événement

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

  •  19-09-2019
  •  | 
  •  

Question

J'ai créé une nouvelle vue (LogView) dans le projet Infrastructure.Module. Ce point de vue sera utilisé comme LogViewer comme fenêtre de sortie VS. Je veux écrire différents messags d'état dans ce LogView de différents modules.

J'ai aussi créé un LogWriter de classe qui publie un événement pour écrire un message dans LogView

Je suis face à problème pour accéder à cette classe LogWriter dans ma demande tout .. s'il vous plaît me dire comment puis-je utiliser ...

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

et abonnement événement LogView est

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

S'il vous plaît me suggérer une solution

classe LogWriter est en projet Infrastructure.Interface LogViewer est en projet Infrastructure.Module

Dans ModuleController.cs de Infrastructure.Module i Ajouté LogWriter dans la collection WorkItem.Services

 WorkItem.Services.AddNew<LogWriter>();

et dans un autre projet que je reçois à l'aide de

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

mais il me retourne nulle.

séquence de chargement du module est également correcte.

Était-ce utile?

La solution

Ajouter cet attribut à votre classe LogWriter

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

puis dans votre code d'accès simplement en faisant ceci:

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

Il faudra que le module que le LogWriter est chargé avant celui qui tente d'y accéder. Je recommande l'ajout d'une dépendance du module si elles sont séparées. La manière exacte de le faire dépend de la IModuleLoader que vous utilisez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top