2015-11-02 12 views
1

我有幾個使用Ninject for IoC的PCL。現在我正在嘗試用MvvmCross創建一個Android Xamarin項目。 guide表示我可以按照兩個步驟繼續使用Ninject而不是MvvmCross實現。覆蓋MvxAndroidSetup.CreateIocProvider打破與MvxBind的綁定:錯誤:未找到視圖類型 - LinearLayout(TextView,EditText ...)

這裏是我的Setup.cs:

public class Setup : MvxAndroidSetup 
{ 
    ... 

    protected override IMvxIoCProvider CreateIocProvider() 
    { 
     return new NinjectMvxIocProvider(... some NinjectModule[]...); 
    } 
} 

我就把NinjectMvxIocProvider here的實施。

它看起來相當好適合我,但造成這種輸出的是在我的佈局中的所有觀點:

MvxBind:Error: 70.85 View type not found - EditText [0:] 
MvxBind:Error: 70.85 View type not found - EditText 
11-02 15:56:05.872 I/mono-stdout(4824): MvxBind:Error: 70.85 View type not found - EditText 

和綁定不工作,雖然與適當的服務實現創建正確的ViewModels。

如果我刪除override IMvxIoCProvider CreateIocProvider()Setup.cs綁定工程。

這個實現有什麼問題,我只是看不到?也許有人有另一個實施,並準備分享?

+1

我認爲這是在ninject包裝中的錯誤 - 它提供了空實現了兩個關鍵的回調方法 - 看https://github.com/migrap/Cirrious.MvvmCross.Ninject/blob/master/src/Cirrious.MvvmCross.Ninject/NinjectMvxIocProvider.cs#L19 - 你可以通過編輯包裝來存儲回調來解決這個問題 - 然後使用一些機制在構建過程的最後一步中調用所有回調。 – Stuart

+1

@Stuart,這正是我在閱讀您的評論之前所做的!我受到你的'MvxSimpleIoCContainer'的啓發。非常感謝! – foxanna

回答

0

怎麼樣做這樣的設置?

public static class App 
{ 
    public static StandardKernel Container { get; set; } 

    public static void Initialize() 
    { 
     var kernel = new Ninject.StandardKernel(new NinjectDemoModule());   

     App.Container = kernel; 
    } 
} 

然後解決:

var viewModel = App.Container.Get<MainViewModel>(); 

這裏是工作示例:IoC Containers with Xamarin

+0

如果不需要使用MvvmCross,則您的方法很有意義。它具有解析和實例化ViewModels的機制,所以我不必手動完成。我只需要配置它提供'IMvxIoCProvider'實現。 – foxanna

相關問題