c# - Ninject InSingletonScope 在每个请求中注入单个参数
问题描述
我正在使用忍者
我有一个类,如果需要,我用它来保存和构建一些缓存数据。它在我的 Niject 绑定中设置如下
kernel.Bind<IConsistencyCheckCacheHelper>().To<ConsistencyCheckCacheHelper>().InSingletonScope();
类在第一次创建类时注入了一些必需的依赖项,然后每次都注入同一个实例。
但是在需要重建数据的情况下,我需要注入运行时依赖项。
我将其用作应用程序范围的缓存,
任何想法如何做到这一点?
解决方案
类在第一次创建类时注入了一些必需的依赖项,然后每次都注入同一个实例。
该类已在 Ninject 注册为单例。这意味着 Ninject 第一次解析 anIConsistencyCheckCacheHelper
时会创建 的实例ConsistencyCheckCacheHelper
,然后它会一遍又一遍地使用同一个实例。
ConsistencyCheckCacheHelper
所以 Ninject 不会一遍又一遍地注入相同的依赖实例。它只创建一个 的实例ConsistencyCheckCacheHelper
,因此注入的任何依赖项实例都不会改变。
如果您希望使用 byConsistencyCheckCacheHelper
中的依赖项在每次解析时都更改,那么您不能将其注册为单例。您将需要使用不同的范围。
.InTransientScope()
(默认值)意味着每次解析一个类型时都会创建一个新实例。
.InRequestScope()
意味着为每个 Web 请求创建一个新实例。
它仍然比这复杂一点。例如,如果ConsistencyCheckCacheHelper
注册为瞬态,则每次都会创建一个新实例。但是,如果它依赖于其他东西并且该依赖项被注册为单例,则每个新实例都ConsistencyCheckCacheHelper
将收到该依赖项的相同单例实例。
通常建议我们从临时依赖项开始。除非我们特别需要重用一个实例,否则创建新对象的成本可能不会那么高。对于 Web 应用程序,InRequestScope
可能是安全的。如果我确定我可以安全地重用该类的一个实例以及一个实例(如果它的依赖项及其依赖项等等),我只会使用单例范围。
推荐阅读
- c# - .net 应用程序基本身份验证
- c - 在不同的函数中使用 C 全局变量时被截断
- excel - 转换 Excel 函数或 VBA 以在 Word 宏中使用
- python - TypeError:'WindowsPath' 类型的参数不可迭代 - 在 django python 中
- speech-recognition - 适用于 3 名以上参与者的演讲者分类工具
- html - CSS:表格边框属性被覆盖
- angular - agGrid - 在现有行之外单击时检测
- python - 我如何理解 numpy.sin() 结果?
- excel - 对象工作表的 VBA 范围失败
- flutter - 上面有图片,下面有文字的卡片