- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在启动时注册为 Singleton、Scoped 或 Transient,Singleton 意味着只会创建一个实例。
假设我们有一个 UserInfo
services.AddSingleton<IUserInfo , UserInfo >();
并且这个 UserInfo 在其他地方填充,可能是中间件,或者像带有 phoneNumber 的工厂这样的服务。电子邮件等等...
如果我们将单例与用户“Fred”一起使用,那么用户“Jack”出现了,用户 Jack 是否会获得包含完整数据的 Freds 实例,直到它被 Jacks 数据覆盖?
所以这意味着我们使用 scoped,因为它是每个范围的一个实例,每个请求都会创建一个范围,如果您需要对 userInfo 做更多的事情,而不是每个请求一次,我们会使用 Transient 吗?
Transient 每次都是一个新实例
努力寻找一种方法来测试这些场景任何想法赞赏,谢谢。
最佳答案
单例意味着每个应用程序生命周期都有新的实例。范围意味着每个请求的新实例。 Transient 意味着每次注入(inject)新实例。
您可能遇到的问题是,在开发过程中,这些事情之间存在相当多的重叠。如果您只注入(inject)一次,在您刚刚更改代码后,三个范围实际上没有区别,因为所有这些都会导致创建一个新实例。这是因为:
然而,在“现实世界”中,差异更为明显。您的应用程序可能会运行数天、数周、数月,而不会重新启动。单例范围的实例将一直存在。 Transient 几乎受限于它被注入(inject)的对象的范围。如果您将具有 transient 作用域的东西注入(inject)到具有单例作用域的东西中,那么 transient 作用域的实例实际上是单例作用域的,只要它没有被注入(inject)到其他任何东西中。最后,请求范围是请求范围。新实例,每次请求,每次。
重要的是要注意,请求范围的实例往往不能与其他类型的范围实例很好地配合。例如,数据库上下文通常是请求范围的。因此,您不能将它注入(inject)到单例范围的东西中。如果你尝试,你实际上会得到一个异常(exception)。但是,您可以采用另一种方式:将单例注入(inject)到请求范围的实例中。
关于c# - 现实世界中的依赖注入(inject) DotNetCore 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49304016/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!