Автоматический выбор областей действия для каждого потока или для каждого запроса - PullRequest
10 голосов
/ 05 октября 2011

Я занимаюсь разработкой библиотеки, которая распространяется внутри моей компании и используется различными приложениями. Эта библиотека должна быть независимой от платформы в том смысле, что она может быть развернута в веб-контексте или даже в консольном приложении. Я хотел бы зарегистрировать объекты для каждого http-запроса или потока, в зависимости от контекста приложения, использующего эту платформу. В StructureMap я могу сделать это, используя время жизни Hybrid. По сути, если HttpContext существует, то объект будет ограничен этим, иначе ThreadLocalStorage будет использоваться для каждого потока. Никакой дополнительной конфигурации не требуется для распределенной библиотеки или потребляющего приложения. Возможно ли это с помощью Autofac? Учитывая нашу широкую вариативность уровней квалификации разработчиков, наша цель - минимизировать / исключить любую специализированную конфигурацию для потребителей.

Я понимаю, что регистрации могут не зависеть от контекста, используя время жизни InstancePerLifetimeScope, но тогда потребляющие приложения должны использовать двоичные файлы интеграции ASP.NET / WCF / MVC , чтобы связать регистрации InstancePerLifetimeScope с запросом Http. , Или, для областей на поток, потребляющий код должен нести ответственность за создание области действия времени жизни для потока .

Есть предложения?

1 Ответ

3 голосов
/ 19 июня 2013

Легко реализовать собственный менеджер времени жизни, который будет проверять, 'HttpContext.Current! = Null', а затем делегировать одному из существующих менеджеров.

Однако я бы предложил, чтобы каждое приложение подключало соответствующего менеджера. Примером может служить сценарий модульного тестирования, в котором «HttpContext» может не существовать, поскольку он является имитированным, и вы можете захотеть управлять временем жизни вручную для конкретных целей тестирования.

...