SCSF : 메시지를 logview에 추가하십시오. 이벤트 출판물 사용

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

  •  19-09-2019
  •  | 
  •  

문제

Infrastructure.Module Project에서 새로운 View (logview)를 만들었습니다. 이보기는 Vs의 LogViewer와 같은 출력 창으로 사용됩니다. 이 logview에서 다른 모듈에서 다른 상태 messags를 쓰고 싶습니다.

또한 LogView에 메시지를 작성하기 위해 이벤트를 게시하는 클래스 로그 라이터를 만들었습니다.

전체 응용 프로그램 에서이 로그 라이터 클래스에 액세스하는 데 문제가 있습니다. 어떻게 사용할 수 있는지 알려주세요 ...

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

그리고 로그 뷰에서 이벤트 구독은입니다

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

해결책을 제안 해주세요

로그 라이터 클래스는 인프라에 있습니다. 인터페이스 프로젝트 로그 뷰어는 인프라에 있습니다.

ModuleController.cs의 인프라.

 WorkItem.Services.AddNew<LogWriter>();

그리고 하나의 다른 프로젝트에서 나는 그것을 사용하고 있습니다

var logwriter = workitem.services.get (); if (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");

이를 위해서는 로그 라이터가있는 모듈에 액세스하려고하는 모듈 앞에로드되어야합니다. 모듈 종속성이 분리되어 있으면 추가하는 것이 좋습니다. 정확한 방법은 사용중인 Imoduleloader에 따라 다릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top