Как получить доступ к целевому объекту при привязке? - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть следующий интерфейс

interface IProfileRepo {

}

И это реализация

public class DBProfileRepo : IProfileRepo {

  string _specialValue;

  public DBProfileRepo(IAuthorizedController authController) {

    _specialValue = authController.SomeValue;
  }
}

Моя привязка

Bind<IProfileRepo>()
         .To<DBProfileRepo>()
         .InRequestScope();

Мой контроллер MVC, который реализует IAuthorizedController, получаетэто внедрение DBProfileRepo, однако, DBProfileRepo требует этот контроллер в качестве аргумента конструктора.Как я могу это сделать?

Я использую Ninject 2.2.1.0

1 Ответ

4 голосов
/ 26 апреля 2011

У вас есть круговая зависимость между вашими объектами, и вам следует избегать этого при разработке иерархии объектов.Хранилище не должно требовать экземпляр контроллера, что просто не имеет смысла.Репозиторий - это класс доступа к данным, который можно повторно использовать в различных приложениях, таких как Desktop или Silverlight, где нет контроллеров.Это контроллер, который должен требовать хранилище, и это почти все.

Если вам нужно передать некоторую информацию в этот хранилище, которая доступна только в контроллере, как, например, параметр запроса, просто спроектируйте объекти передать этот объект методу репозитория от контроллера, но не передать весь контроллер.

...