Модель представления Ninject InSingletonScope () не назначена представлению при привязке - PullRequest
2 голосов
/ 01 ноября 2011

Я предполагаю, что когда в NinjectModule я связываю

Bind<SplashViewModel>().ToSelf().InSingletonScope();

, экземпляр SplashViewModel является своего рода кэшированным в ядре Ninject, и каждый раз, когда я вызываю kernel.Get<SplashViewModel>, я получаютот же экземпляр модели представления вернулся ко мне.Вот что происходит, правда.

В моем NinjectUIModule я звоню:

Bind<SplashViewModel>().ToSelf().InSingletonScope();
Bind<SplashWindow>().ToMethod(context => new SplashWindow()
                                                       {
                                                           DataContext = new SplashViewModel()
                                                       });

Проблема в том, что SplashWindow получает другой новый экземпляр SplashViewModel, а неЭкземпляр, который кэшируется в ядре Ninject и возвращается всем другим сторонам получения.

Как связать модель представления с DataContext в представлении в модуле Ninject и разрешить его возврат через ядро. Получите другой код в приложении позже.

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

Если ваше SplashWindow примет SplashViewModel в качестве аргумента ctor, то эта инициализация позаботится о вас Ninject.Вам даже не нужно будет определять привязку SplashWindow.

0 голосов
/ 01 ноября 2011

Я обошел проблему с помощью следующего связующего подхода:

class NinjectUIModule: NinjectModule
    {
        public override void Load()
        {
            Bind<SplashViewModel>().ToSelf().InSingletonScope();
            Bind<SplashWindow>().ToMethod(context => new SplashWindow()
                                                         {
                                                            DataContext = Kernel.Get<SplashViewModel>()
                                                         });
        }
    }

Я не уверен, что это идеальное решение.

...