Я хочу отправлять сообщения из разных частей приложения (ASP.NET) нескольким слушателям (например: элементы управления, отображающие эти сообщения => время жизни слушателя = время жизни запроса). Слушатели имеют разные типы, чтобы их можно было фильтровать при получении сообщений.
Я хочу реализовать эту функциональность, используя Ninject, чтобы стать более гибким (добавление различных областей, решение типов, ...). На данный момент мне нужен был только случай с областью запроса, и я разработал без Ninject с использованием HttpContext.Current.Item["MyCollectionOfListeners"]
, но это слишком специфично, и я хочу обеспечить большую гибкость.
До сих пор мне не удалось найти решение для хранения констант в области и повторно использовать эти константы только для этой области.
Например, константа может быть элементом управления ASP.NET, время жизни которого начинается внутри ее конструктора и заканчивается событием PreRender
(потому что Render
бесполезен).
Это означает, что этот экземпляр слушателя будет добавлен в Ninject, а затем удален на PreRender
.
Я думал о том, чтобы сделать что-то вроде:
Kernel.Bind<IMessageListener>.ToConstant(listener).InRequestScope();
или
Kernel.Bind<IMessageListener>.ToConstant(listener).InScope(ctx => listener);
но это не служит моему делу. Также константа возвращается для каждого запроса, и привязка не исчезает из коллекции после того, как константа выходит из области видимости.
Также я не знаю, как удалить привязку на основе данного слушателя (константа).
Как правильно решить такой сценарий с помощью Ninject?