我使用Xamarin.Forms和棱鏡6.3.0Xamarin窗體IEventAggregator iOS中類應用程序崩潰
我有,我想用IEventAggregator
iOS的項目的類。當我將IEventAggregator
作爲參數傳遞給類的構造函數時,應用程序崩潰。
澄清,我試圖從iOS類發佈,而不是訂閱由Xamarin.Forms發佈的事件。
如何在Xamarin.Forms的iOS項目的類中使用IEventAggregator
?
我使用Xamarin.Forms和棱鏡6.3.0Xamarin窗體IEventAggregator iOS中類應用程序崩潰
我有,我想用IEventAggregator
iOS的項目的類。當我將IEventAggregator
作爲參數傳遞給類的構造函數時,應用程序崩潰。
澄清,我試圖從iOS類發佈,而不是訂閱由Xamarin.Forms發佈的事件。
如何在Xamarin.Forms的iOS項目的類中使用IEventAggregator
?
的問題的答案是here
總之,在班級中的iOS項目中添加using語句using Microsoft.Practices.Unity;
和在類的constractor爲了增加
var ea = ((App)Xamarin.Forms.Application.Current).Container.Resolve<IEventAggregator>();
到獲取EventAggregator。
然後你可以用它來發布消息,即
ea.GetEvent<SomeEvent>().Publish(somePayload);
我不知道是否有更優雅的解決方案,但有一個工作。您必須使用正確的注入參數手動添加依賴項到您的容器。
在你的平臺特定項目(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)]
但我沒有嘗試,如果它墜毀,如果它不被刪除。
不,它不起作用。 (未處理的異常: Foundation.MonoTouchException:拋出的Objective-C異常。名稱:NSInternalInconsistencyException原因:應用程序窗口預期會有一個異常(太長以至於無法將其作爲註釋使用)應用程序啓動結束時的根視圖控制器 本地堆棧跟蹤:等) – Dimitris
*「的應用程序崩潰」 *是不是一個合適的錯誤描述。什麼異常導致應用程序崩潰?此外,在不知道代碼的情況下很難提供幫助。請添加您的*相關*代碼或 - 更好 - 一個[mcve]。 –
沒有可見的錯誤。設備(iPhone 6)在沒有任何消息的情況下停止應用程序。代碼很簡單'public My ServiceService(IEventAggregator ea) { _ea = ea; }' – Dimitris
你試過調試嗎?增加了'try'-'catch'塊? (我知道這很簡陋,但在設備上調試有時不如調試本地應用程序時那麼舒服 - 當調試器沒有顯示正常的例外情況時,它有時對我有幫助。) –