SCSF: إلحاق الرسائل إلى LogView. باستخدام نشر الأحداث

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

  •  19-09-2019
  •  | 
  •  

سؤال

قمت بإنشاء طريقة عرض جديدة (LogView) في مشروع البنية التحتية. سيتم استخدام هذه الرأي ك LogViewer مثل نافذة الإخراج في مقابل. أريد أن أكتب Messags حالة مختلفة في LogView هذا من وحدات مختلفة.

أنا أيضا أنشأت سجل LogWiter فئة يقوم بنشر حدث لكتابة رسالة إلى LogView

أنا مواجهة مشكلة للوصول إلى فئة LogWriter هذه في تطبيقي بالكامل .. من فضلك قل لي كيف يمكنني استخدام هذا ...

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

وفي اشتراك حدث Logview

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

يرجى اقتراح لي الحل

فئة LogWriter في البنية التحتية. Interface Project LogViewer في مشروع البنية التحتية.

في modulecontroller.cs من البنية التحتية

 WorkItem.Services.AddNew<LogWriter>();

وفي مشروع آخر أحصل عليه باستخدام

var logwriter = workitem.services.get ()؛ إذا (LogWriter! = NULL) LOGWRITER.WRITEMSG ("الرسالة")؛

لكنه يعود لي فارغة.

نمط تحميل الوحدة هو أيضا صحيح.

هل كانت مفيدة؟

المحلول

أضف هذه السمة إلى فئة LogWriter الخاصة بك

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

ثم في التعليمات البرمجية الخاصة بك ما عليك سوى الوصول إليها عن طريق القيام بذلك:

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

سيتطلب ذلك أن يتم تحميل الوحدة النمطية التي يتم فيها تشغيل LogWriter قبل ذلك الذي يحاول الوصول إليه. أود أن أوصي بإضافة تبعية الوحدة النمطية إذا كانت مفصولة. تعتمد الطريقة الدقيقة للقيام بذلك على imoduleleloader الذي تستخدمه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top