2009-04-08 2 views
0

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

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

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

ответ

1

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

  • абстрагировать создание вашего запроса-Scoped службы за заводом, и ввести завод или
  • изменить вашу Singleton и сделать его запрашивать в области видимости. Это не должно быть проблемой, если создание службы не дорого.
0

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

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

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