Как использовать метод IsSingletonScope от Ninject?

#c# #dependency-injection #ioc-container #ninject

#c# #внедрение зависимостей #ioc-контейнер #ninject

Вопрос:

У меня есть следующие Ninject привязки в моем проекте.

     Bind<IThingsDataContext>().To<ThingsDataContext>().InSingletonScope();
    Bind<IThingViewModel>().To<ThingViewModel>();
    Bind<IThingsListViewModel>().To<ThingsListViewModel>();
  

Мне нужно внедрить IThingsDataContext в ThingViewModel и ThingsListViewModel через конструктор, и это должно быть то же самое, что и IThingsDataContext .

Но когда я делаю

 _kernal.Get<IThingViewModel>();
_kernal.Get<IThingsListViewModel>();
  

Я вижу два разных экземпляра IThingsDataContext , внедренных в viewmodels!
Я делаю что-то не так с привязками или использую IsSingletonScope неправильно?

Комментарии:

1. Насколько я вижу, это должно сработать. Не могли бы вы, пожалуйста, предоставить модульный тест воспроизведения?

Ответ №1:

Я только возвращаюсь к использованию Ninject, поэтому я немного устал, но это, но это похоже на проблему с синглтоном, с которой я столкнулся при переходе с Ninject 1.0 на 2.0. Вы можете прочитать более подробную информацию в моем блоге, но я думаю, что сначала вы хотите привязать ThingsDataContext к самому себе в контексте singleton. Затем вы можете привязать IThingsDataContext к копии ThingsDataContext, которая находится в ядре.

 Bind<ThingsDataContext>().ToSelf().InSingletonScope();
kernel.Bind<IThingsDataContext>.ToMethod( c => c.Kernel.Get<ThingsDataContext>());