【问题标题】:Overriden MvxAndroidSetup.CreateIocProvider breaks binding with MvxBind:Error: View type not found - LinearLayout (TextView, EditText...)重写的 MvxAndroidSetup.CreateIocProvider 中断了与 MvxBind 的绑定:错误:未找到视图类型 - LinearLayout(TextView、EditText...)
【发布时间】:2016-02-02 11:23:03
【问题描述】:

我有几个使用 Ninject 进行 IoC 的 PCL。现在我正在尝试使用 MvvmCross 创建一个 Android Xamarin 项目。 guide 说我可以按照两个步骤继续使用 Ninject 而不是 MvvmCross 实现。

这是我的 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

并且绑定不起作用,尽管 ViewModel 是通过正确的服务实现正确创建的。

如果我从Setup.cs 中删除override IMvxIoCProvider CreateIocProvider(),则绑定有效。

这个实现有什么我看不到的问题吗?也许有人有另一个实现并准备分享?

【问题讨论】:

  • 我认为这是 ninject 包装器中的一个错误 - 它为两个关键回调方法提供了空实现 - 请参阅 github.com/migrap/Cirrious.MvvmCross.Ninject/blob/master/src/… - 您可以通过编辑包装器来存储回调来解决这个问题 - 然后使用一些在构建过程的最后一步调用所有回调的机制。
  • @Stuart,这正是我在阅读您的评论之前所做的!我的灵感来自您的MvxSimpleIoCContainer。非常感谢!

标签: android xamarin ninject mvvmcross


【解决方案1】:

这样设置怎么样?

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

【讨论】:

  • 如果不需要使用 MvvmCross,您的方法是有意义的。它具有解析和实例化 ViewModel 的内置机制,因此我不必手动执行此操作。我只需要配置它提供IMvxIoCProvider 实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 2016-01-06
相关资源
最近更新 更多