【问题标题】:Using Ninject with MVVM Light将 Ninject 与 MVVM Light 一起使用
【发布时间】:2014-10-28 04:13:41
【问题描述】:

在 WPF MVVM 应用程序中使用 MVVM Light。

我想使用 Ninject 而不是 SimpleIOC。

即使在全新的 WPF/MVVM Light v4 项目中,当 XAML 调用 ViewModelLocator 中的 Main 属性时,我也会得到 MainViewModel 的空引用。

 private static readonly StandardKernel kernel;

    static ViewModelLocator()
    {
        if (ViewModelBase.IsInDesignModeStatic)
        {
        }
        else
        {
            kernel = new StandardKernel(new mymodule());
        }
    }

    public MainViewModel Main
    {
        get { return kernel.Get<MainViewModel>(); }
    }

MyModule 看起来像这样:

    public class mymodule:NinjectModule
{
    public override void Load()
    {
        Bind<MainViewModel>().ToSelf();
    }
}

我也试过

    public class mymodule:NinjectModule
{
    public override void Load()
    {
        Bind<MainViewModel>().To<MainViewModel();
    }
}

【问题讨论】:

  • 是 kernel.Get 返回 null 还是 kernel null?
  • 如果涉及异常,请始终在示例代码中提供完整的异常类型、消息和堆栈跟踪。

标签: c# wpf ninject mvvm-light


【解决方案1】:

Ninject 内核的 .Get&lt;T&gt; 不返回 null。

除非你明确告诉它这样做:

  • Bind&lt;T&gt;().ToConstant(null);
  • Bind&lt;T&gt;().ToMethod(x =&gt; null);
  • Bind&lt;T&gt;().ToProvider&lt;TProvider&gt;() --> 和 TProvider.Create(...) 返回 null

你不太可能有这些。 所以如果访问Main属性时有NullReferenceException,那一定是因为private static readonly StandardKernel kernel为null。 现在,如果您提供给我们的代码是Minimal, Complete, and Verifiable example,这意味着ViewModelBase.IsInDesignModeStatic 返回true

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多