inconsistency of RegisterInstance method and InstancePerDependency lifetime scope(RegisterInstance方法和InstancePerependency生存期范围不一致)
问题描述
我是Autofac新手,Autofac的一个API允许您提供创建为的实例(不使用反射):
var builder = new ContainerBuilder();
MyClass myClass = new MyClass();
builder.RegisterInstance<MyClass>(myClass);
但API还允许您进一步将生命周期控制为瞬变:
builder.RegisterInstance<MyClass>(myClass).InstancePerDependency();
因此,如果在子生命周期作用域中将其解析为:
IContainer container = builder.Build();
using (var childScope1 = container.BeginLifetimeScope()) {
MyClass myClass1 = childScope1.Resolve<MyClass>();
...
}
using (var childScope2 = container.BeginLifetimeScope()) {
MyClass myClass2 = childScope2.Resolve<MyClass>();
...
}
...
您将获得与您在新建实例时创建的实例相同的实例,因此您不会在每次请求时都有一个不同的MyClass
实例,这正是短暂生存期的目的。因此,将InstancePerDependency
或InstancePerLifetimeScope
方法与RegisterInstance
方法一起使用实际上没有意义,这就是我所认为的。但既然API允许这样做,那么它的真正含义是什么呢?
推荐答案
这是the second question您问过您在哪里提供重现程序,但您尚未实际运行代码。
如果您在注册和实例所在的位置运行代码,然后尝试更改其生存期范围,则会出现异常。
System.InvalidOperationException : The instance registration 'MyClass' can support SingleInstance() sharing only.
我认识到,在某些假设情况下,它似乎可以工作,因为它编译,但由于依赖项注入主要基于运行时的连接,因此有许多错误只有在构建容器并将所有内容挂钩在一起时才会被捕获。
我建议放慢速度以加快速度:与其编写假设的代码并考虑会发生什么,您可以通过设置一个仅包含Autofac和Xunit的Scratch项目来回答您自己的许多问题。编写一组很小的单元测试来验证理论或检查事情。它可以为您节省大量撰写问题的时间,这将节省我们尝试回答问题的时间,并且通过获得一些实践经验,它将使您更深入地了解事物是如何运行的。
这篇关于RegisterInstance方法和InstancePerependency生存期范围不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:RegisterInstance方法和InstancePerependency生存期范围不一致
基础教程推荐
- 将 XML 转换为通用列表 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- SSE 浮点算术是否可重现? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何激活MC67中的红灯 2022-01-01