2011-07-17 231 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

非常感謝。 –

相關問題