2011-07-17 165 views
1

我有一个Windows Phone应用程序与Ninject IOC。PhoneApplicationPage没有无参数构造函数

在某些时候,我意识到我的MainPage.xaml.cs(首先被初始化的应用程序的初始页面)需要一个带参数的构造函数。

我已经加入PARAMS到这样一个构造函数:

public partial class MainPage : PhoneApplicationPage 
    { 
     private readonly Settings _settings; 

     // Constructor 
     public MainPage(Settings _settings) 

在我Ninject模块我有设置型粘结剂:

this.Bind<Settings>().ToSelf().InSingletonScope(); 

但是,每当我运行一个应用程序,我在启动时遇到MissingMethodException。

我已经解决了这个问题,通过在MainPage()中保留一个无参数的构造函数,并且使用Ninject的服务定位模式来获取Settings实例。

我想知道是否有办法让我的应用服务定位器免费?

+1

你能够将依赖项移动到您的ViewModel而不是实际的页面类吗?这就是我正在做的,我有一个页面基类,通过Ninject加载它的模型。不知道是否可以替换创建页面的代码,我还没有看到过。 –

回答

3

恐怕这对于Silverlight导航工作的方式来说是不可能的。你必须有无参数的构造函数。通常,您可以使用服务定位器来解析您的ViewModel,这是您需要注入依赖项的位置,而不是您的视图。

作为一个便笺,不要陷入思考你应该像开发桌面应用程序一样开发移动应用程序的陷阱。相同的规则不会自动应用。 IOC是一种企业设计模式,旨在通过长期开发许多开发人员来降低大型应用程序的复杂性。手机应用程序通常是小应用程序,很少有开发人员可以在短时间内开发应用程序 - 所以它不一定是正确的,因为您必须严格遵循设计模式,甚至完全遵循。

+0

非常感谢。 –

相关问题