c# – Ninject – 如何在范围中保存常量?

我想将来自应用程序的不同部分(ASP.NET)的消息发送到多个侦听器(例如:显示这些消息的控件=>侦听器生存期=请求生存期).监听器具有不同的类型,以便在接收消息时可以对其进行过滤.

我想使用Ninject实现这个功能变得更加灵活(添加各种范围,解决类型……).现在我只需要请求范围的情况,我使用HttpContext.Current.Item [“MyCollectionOfListeners”]在没有Ninject的情况下开发,但这太特别了,我想提供更多的灵活性.

到目前为止,我还没有设法找到一个解决方案来保持范围中的常量,并且只为该范围重用此常量.
例如,一个常量可能是一个ASP.NET控件,它的生命周期在其构造函数内部开始,并在PreRender事件中结束(因为在Render上几乎没用).
这意味着将此侦听器实例添加到Ninject,然后在PreRender上删除.

我想过做的事情:

Kernel.Bind<IMessageListener>.ToConstant(listener).InRequestScope();

要么

Kernel.Bind<IMessageListener>.ToConstant(listener).InScope(ctx => listener);

但这不符合我的情况.此外,为每个请求返回常量,并且在常量超出范围后绑定不会从集合中消失.
此外,我不知道如何基于给定的侦听器(常量)删除绑定.

使用Ninject解决这种情况的正确方法是什么?

最佳答案 常量是常量,这意味着它们是单体的,并且在定义绑定时定义一次.它们不应该用于另一个范围.

您想要做的是使用ToMethod或ToProvider返回实例.范围很可能在请求范围内,或者可能是控件所在的页面.第二种选择有点复杂.

点赞