2017-10-12 90 views
-1

我使用Xamarin.Forms和棱鏡6.3.0Xamarin窗體IEventAggregator iOS中類應用程序崩潰

我有,我想用IEventAggregator iOS的項目的類。當我將IEventAggregator作爲參數傳遞給類的構造函數時,應用程序崩潰。

澄清,我試圖從iOS類發佈,而不是訂閱由Xamarin.Forms發佈的事件。

如何在Xamarin.Forms的iOS項目的類中使用IEventAggregator

+0

*「的應用程序崩潰」 *是不是一個合適的錯誤描述。什麼異常導致應用程序崩潰?此外,在不知道代碼的情況下很難提供幫助。請添加您的*相關*代碼或 - 更好 - 一個[mcve]。 –

+0

沒有可見的錯誤。設備(iPhone 6)在沒有任何消息的情況下停止應用程序。代碼很簡單'public My ServiceService(IEventAggregator ea) { _ea = ea; }' – Dimitris

+0

你試過調試嗎?增加了'try'-'catch'塊? (我知道這很簡陋,但在設備上調試有時不如調試本地應用程序時那麼舒服 - 當調試器沒有顯示正常的例外情況時,它有時對我有幫助。) –

回答

0

的問題的答案是here

總之,在班級中的iOS項目中添加using語句using Microsoft.Practices.Unity;和在類的constractor爲了增加

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

到獲取EventAggregator。

然後你可以用它來發布消息,即

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

0

我不知道是否有更優雅的解決方案,但有一個工作。您必須使用正確的注入參數手動添加依賴項到您的容器。

在你的平臺特定項目(iOS版在這種情況下,但它適用於Android的,太)以下行更改

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