#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>());