Простая документация по инжекторам дает отличные примеры того, как настроить контейнер для WebRequest, Web API, WCF,... но примеры специфичны для одной технологии/образа жизни за раз. Наше веб-приложение использует большинство из них вместе! Мне непонятно, как настроить контейнер для работы с несколькими образцами жизни.
Скажем, у меня есть проект MVC с Web API. У меня есть следующие объекты:
- MyDbContext: мой код сущности первого db-контекста
- IMyDataProvider, реализованный MyDataProvider: содержит логику запросов и использует MyDbContext
- MyController: MVC-контроллер, который использует IMyDataProvider
- MyApiController: контроллер WebApi, который использует IMyDataProvider
Должен ли я создавать и настраивать один контейнер для каждого типа образа жизни?
Когда я регистрирую все, RegisterPerWebRequest<T>
работает в обоих типах контроллеров. Это безопасно? Или я столкнулся с трудностями при использовании async/wait в контроллере Web API?
Какова наилучшая конфигурация, когда у меня есть как MVC, так и Web API-контроллеры, которые вводят те же экземпляры?
Должен ли я использовать гибридный образ жизни?
Теперь, чтобы усложнить ситуацию... наше приложение также использует фоновые задачи и SignalR.
Оба они иногда происходят за пределами WebRequest и нуждаются в доступе к тем же объектам, что описаны выше.
Лучшим решением было бы использовать область Lifetime?
Мне нужно создать новый контейнер для этого образа жизни? или я могу повторно использовать/перенастроить свой контейнер MVC/Web API?
Есть ли тройной образ жизни?