SCSF: Messages dans Append LogView. en utilisant la publication de l'événement
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.
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.