Внедрение зависимостей в хранилище моделей - это синглтон? - PullRequest
1 голос
/ 11 сентября 2009

Мои контроллеры теперь реализуют интерфейс и внедряют реализацию репозитория с использованием инфраструктуры Unity. Мой вопрос заключается в том, являются ли эти внедренные реализации синглетонами? Означает ли это, что все мои пользователи, работающие с хранилищем (с контроллера), используют один и тот же экземпляр?

Ответы [ 3 ]

1 голос
/ 21 октября 2009

Это зависит от того, проводите ли вы сеанс ORM вместе с вашим экземпляром репозитория. Если ваш репозиторий представляет собой просто набор статических методов, вам все равно, и вы можете сделать его одиночным. В противном случае вы хотите сохранить состояние только в рамках одного веб-запроса, чтобы потоки других запросов не мешали ему.

Unity, в отличие от других платформ IoC. не поставляется с синглтоном на менеджер времени жизни веб-запроса, но вы можете легко реализовать его, см. здесь, например: Контекст синглтона на вызов (веб-запрос) в Unity

0 голосов
/ 14 сентября 2009

Взято из документов MSDN Unity ...

Время жизни объекта, который он строит, будет соответствовать времени жизни, которое вы указываете в параметрах метода. Если вы не укажете значение для времени жизни, тип будет зарегистрирован для временного времени жизни, что означает, что при каждом вызове Resolve будет создаваться новый экземпляр ...

Включите экземпляр класса ContainerControlledLifetimeManager в параметры метода RegisterType, чтобы указать контейнеру зарегистрировать одноэлементное отображение.

Таким образом, по сути, инъекция временная, если вы не укажете ее как синглтон.

0 голосов
/ 11 сентября 2009

Нет, не делайте репозитории singleton, специально для веб-приложения.

Фабрика контроллеров создает хранилище (используя Unity) и внедряет их в контроллер.

...