2017-10-12 1 views
-1

충돌 아이폰 OS 클래스에서 IEventAggregator를 형성한다. IEventAggregator을 매개 변수로 클래스의 생성자에 전달하면 응용 프로그램이 충돌합니다.자 마린 내가 내가 <code>IEventAggregator</code>를 사용하려면 아이폰 OS 프로젝트의 클래스가 Xamarin.Forms 및 프리즘 6.3.0</p> <p>를 사용하고 응용 프로그램

분명히 말해서, 나는 Xamarin.Forms에 의해 게시 된 이벤트에 가입하지 않기 위해 iOS 클래스에서 게시하려고합니다.

Xamarin.Forms의 iOS 프로젝트에서 IEventAggregator 클래스를 어떻게 사용할 수 있습니까?

+0

* "응용 프로그램이 충돌"* 적절한 오류 설명하지 않습니다를 게시하는 데 사용할 수 있습니다. 어떤 예외로 인해 앱이 다운 되나요? 또한 코드를 알지 못하면서도 도움이되지 않습니다. * 관련 * 코드를 추가하십시오 - 또는 더 나은 - a [mcve]. –

+0

눈에 보이는 오류는 없습니다. 장치 (iPhone 6)는 메시지없이 응용 프로그램을 중지합니다. 코드는 간단합니다. public My ServiceService (IEventAggregator ea) { _ea = ea; }' – Dimitris

+0

디버깅을 시도 했습니까? 'try'-'catch '블록을 추가 했습니까? (나는 매우 원유이지만, 디바이스의 디버깅은 때로는 로컬 애플리케이션을 디버깅하는 것만큼이나 편안하지 않다. 디버거가 적절한 예외를 보여주지 않았을 때 가끔 도움이되었다.) –

답변

0

질문에 대한 대답은 아이폰 OS 프로젝트의 클래스에서, 짧은에서 here

입니다 추가 문 using Microsoft.Practices.Unity; 및 클래스의 constractor에를 사용하기 위해

var ea = ((App)Xamarin.Forms.Application.Current).Container.Resolve<IEventAggregator>();

를 추가 EventAggregator를 취득합니다.

그런 다음 메시지를 즉

ea.GetEvent<SomeEvent>().Publish(somePayload);

0

좀 더 세련된 해결책이 있는지는 모르겠지만 작동하는 것은 있습니다. 올바른 주입 매개 변수를 사용하여 컨테이너에 의존성을 수동으로 추가해야합니다.

플랫폼 특정 프로젝트에서

(이 경우 아이폰 OS,하지만 너무, 안드로이드에 대한 보유)

this.LoadApplication(new App()); 

을 감안할 때

var app = new App(); 
this.LoadApplication(); 

에 다음 줄을 변경하려면 App 당신은 PrismApplication 수있다 이제 IUnityContainer에 액세스하여 수동으로 유형을 등록하십시오.

var app = new App(); 
app.Container.RegisterType(typeof(IServiceService), 
    typeof(MyServiceService), 
    string.Empty, 
    new ContainerControlledLifetimeManager(), 
    new InjectionConstructor(new ResolvedParameter(typeof(IEventAggregator)))); 
this.LoadApplication(app); 

이제 Unity가 MyServiceService을 올바르게 해결할 수 있어야하며 앱이 더 이상 충돌하지 않아야합니다. 어쨌든 제거해야 할 수도 있습니다.

[assembly: Xamarin.Forms.Dependency(typeof(MyServiceService)] 

그러나 제거하지 않으면 충돌하지 않았습니다.

+0

아니요, 작동하지 않습니다. 응용 프로그램이 충돌 (예외로 너무 길어서 주석으로 넣을 수는 없지만 여기에 첫 번째 비트가 있습니다. 처리되지 않은 예외 : Foundation.MonoTouchException : Objective-C 예외가 발생했습니다.) 이름 : NSInternalInconsistencyException 이유 : 응용 프로그램 창에 응용 프로그램 실행 끝의 루트보기 컨트롤러 기본 스택 추적 : 등) – Dimitris

관련 문제