Использование Ninject с MVVM Light

1

Использование 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();
    }
}
  • 0
    Kernel.Get <MainViewModel> возвращает значение NULL или ядро NULL?
  • 0
    В случае возникновения исключений всегда предоставляйте полный тип исключения, сообщение и трассировку стека вдоль примера кода.
Теги:
wpf
ninject
mvvm-light

1 ответ

2

Ядро .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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню