2014-09-03 98 views
1

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

我想使用Ninject而不是SimpleIOC。

即使在全新的WPF/MVVM Light v4项目中,当ViewModelLocator的Main属性被XAML调用时,我也会获得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(); 
    } 
} 
+0

是kernel.Get 返回null还是内核null? – 2014-09-03 21:48:36

+0

如果涉及异常,请始终沿示例代码提供完整的异常类型,消息和堆栈跟踪。 – BatteryBackupUnit 2014-09-04 05:04:14

回答

2

Ninject内核的.Get<T>没有返回null。

除的情况下,你明确告诉它这样做:

  • Bind<T>().ToConstant(null);
  • ​​3210
  • Bind<T>().ToProvider<TProvider>() - >和TProvider.Create(...)返回null

所以,如果访问时,有一个NullReferenceExceptionMain属性,它必须是因为private static readonly StandardKernel kernel为空。 现在,如果您向我们提供的代码是Minimal, Complete, and Verifiable example,那意味着ViewModelBase.IsInDesignModeStatic返回true