Использование MVVM Light в приложении WPF MVVM.
Я хочу использовать Ninject вместо SimpleIOC.
Даже в новом проекте WPF/MVVM Light v4 я получаю нулевую ссылку для MainViewModel, когда основное свойство в ViewModelLocator вызывается XAML.
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();
}
}
Ядро .Get<T>
не возвращает null.
За исключением случаев, когда вы прямо скажете это:
Bind<T>().ToConstant(null);
Bind<T>().ToMethod(x => null);
Bind<T>().ToProvider<TProvider>()
→ и TProvider.Create(...)
возвращает null Поэтому, если при доступе к свойству Main
существует NullReferenceException
, это должно быть из-за того, что private static readonly StandardKernel kernel
равно null. Теперь, если код, который вы нам предоставили, является примером Minimal, Complete и Verifiable, это означает, что ViewModelBase.IsInDesignModeStatic
возвращает true
.