В этой статье MSDN описывается, как обработчики HTTP-сообщений могут эффективно использоваться в ASP.NET Web API для "украшения" запросов. Кроме того, в статье показан следующий код для регистрации ваших пользовательских обработчиков в конвейере веб-API:
config.MessageHandlers.Add(new MessageHandler1());
Проблема с этим подходом заключается в том, что он эффективно регистрирует MessageHandler1
как одноэлементный. Это нормально, когда сам обработчик не имеет состояния и никаких зависимостей, но в системе, основанной на принципах дизайна SOLID, очень вероятно, что эти обработчики будут иметь собственные зависимости и очень вероятно, что некоторые из этих зависимостей нуждаются в время жизни, которое короче, чем одиночный.
Если в этом случае такой обработчик сообщения не должен быть создан как singleton, так как в общем случае компонент никогда не должен иметь продолжительность жизни, которая больше, чем время жизни его зависимостей.
Итак, мой вопрос в том, какие альтернативные способы мы должны регистрировать обработчиков пользовательских сообщений таким образом, чтобы их можно было решить из нашего контейнера IoC по каждому запросу?