WP7 и Ninject, как заставить приложение получать экземпляры представления из контейнера IoC - PullRequest
0 голосов
/ 16 февраля 2012

Я использую Ninject для внедрения экземпляров модели представления в свойство DataContext каждого представления, чтобы избежать использования ServiceLocator, и использую следующий синтаксис внутри NinjectModule, как предлагается здесь :

public class TestingModule : NinjectModule
{
    public override void Load()
    {
        Bind<MainPage>().ToMethod(ctx => new MainPage() { DataContext = new MainPageViewModel() }).InSingletonScope();
    }
}

Если я использую:

var x = Kernel.Get<MainPage>();

Тогда свойство DataContext внутри x устанавливается на экземпляр MainPageViewModel, и это здорово.

Проблема заключается в том, что приложение не получает экземпляры представления из контейнера DI при переходе на страницы или при запуске, поэтому свойство DataContext никогда не устанавливается ни в одном из представлений при запуске приложения на устройстве или внутри эмулятор.

Кто-нибудь знает, как я могу перехватить создание представлений, чтобы заставить приложение извлекать экземпляры представлений из контейнера DI?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Взгляните на одну из различных платформ MVVM, таких как Caliburn Micro, вместо того, чтобы изобретать велосипед.Они проделали большую работу, упрощая объединение видов и моделей во время использования контейнера IoC.

Вот сообщение в блоге о том, как настроить Caliburn Micro с Ninject для WP7: http://devlicio.us/blogs/derik_whittaker/archive/2011/07/08/using-ninject-with-commonservicelocator-with-caliburn-micro-on-wp7.aspx

0 голосов
/ 21 января 2014

Вы можете добавить эту строку в конструктор MainPage:

DataContext = Kernel.Get<MainPageViewModel>();
...