Итак, я столкнулся с этой путаницей в прошлом и обошел ее, просто не используя Ninject. Теперь, когда я переделываю свой сайт, я нахожусь в точке, где Ninject снова оказывается полезной, но я запутался. Опять .
У меня есть проект MVC3, использующий шаблон репозитория. В настоящее время мой Home Controller создает несколько объектов, таких как OrderRepository.cs, CustomerRepository.cs и отправляет их в сервисы OrderService.cs и CustomerService.cs. У меня есть тестовый проект, который я могу использовать для отправки в FakeOrderRepository.cs и FakeCustomerRepository.cs. Это удобно для модульного тестирования, когда я прохожу свой проект.
Однако я понимаю, что, объявив репозитории в моем контроллере и модульных тестах, я устанавливаю зависимость от этих объектов. То, что я хотел бы сделать, это не передавать репозитории, и чтобы мой уровень Service использовал Ninject, чтобы сказать: «О, смотри, IOrderRepository в моем конструкторе, я лучше пойду, получу OrderRepository».
Проблема, с которой я столкнулся в прошлый раз, заключается в том, что, хотя я могу связать OrderRepository с любым экземпляром или IOrderRepository в конструкторе и связать их вместе в моем Global.ascx, это, похоже, оставляет мои модульные тесты высокими и сухими. Если я не войду и не переключу каждую привязку в моем Global.ascx с объектом, который я хочу передать (в данном случае, FakeOrderRepository.cs) каждый раз, когда я запускаю тесты, мой реальный репозиторий будет передаваться. Как я могу получить свой тестовый проект и Controller передают разные репозитории при использовании одного и того же интерфейса IOrderRepository?
Вот так, длинное объяснение чего-то, что, вероятно, просто. У меня такое чувство, что я обдумываю это и просто упускаю несколько ключевых понятий.
tldr: Как я могу иметь конструктор на своем сервисном уровне и передавать объекты хранилища, отличающиеся от моих контроллеров и модульных тестов, используя Ninject.