Жизненный цикл внедрения зависимостей - PullRequest
0 голосов
/ 08 апреля 2009

У меня есть одноэлементная служба с зависимостью от службы с жизненным циклом в области запросов.

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

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2009

Я бы не советовал внедрять сам контейнер в ваш одноэлементный сервис. Вместо этого:

  • абстрагируйся от создания твоей службы в пределах запроса за фабрикой и добавь фабрику, или
  • измените область действия вашего синглтона и задайте его для области запросов. Это не должно быть проблемой, если создание сервиса не дорого.
0 голосов
/ 08 апреля 2009

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

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

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

...