Автоматически выбирать потоковые или индивидуальные объекты

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

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

Любые предложения?

Ответ 1

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

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