2017-10-12 87 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