我之前问过一个问题here关于 autofac 在 HTTP 请求结束时不处理我的对象。我现在认为我有一个更大的问题,因为有证据表明它正在逐个请求地提供相同的对象。再次,我正在使用他们的说明 here 。我的测试有点复杂,因为我使用委托(delegate)语法来创建对象,但我认为我正在将其标记为请求生命周期。 Global.asax.cs:
protected void Application_Start(object sender, EventArgs e)
{
...
var builder = new Autofac.Builder.ContainerBuilder();
builder.Register<IDBConnectionSelector>(
(c) => new CachingDBConnections(ConstructorArgs...))
.HttpRequestScoped();
var container = builder.Build();
_containerProvider = new ContainerProvider(container);
}
public IContainerProvider ContainerProvider
{
get { return _containerProvider; }
}
static IContainerProvider _containerProvider;
我的目的是注册 IDBConnectionSelector 以获取使用自定义构造函数创建但具有 HTTP 请求范围的具体类型 CachingDBConnections。
CachingDBConnections 对象的某些方法在后续请求中失败,这让我相信我得到的方法与上次得到的方法相同,而不是每个请求都得到新的方法。
这有道理吗?我做错了什么?
最佳答案
大多数情况下都会发生这种情况(在任何 IoC 容器中),您会发现依赖链中的一个组件是单例。
例如
A -> B -> C
如果A是“工厂”,B是“单例”,C是“工厂”,那么解析A将获得对单例B的引用,而单例B将始终引用相同的C。
为了在每次解析 A 时创建新的 C,B 也必须是“工厂”。
我的猜测怎么样?这是问题吗?
尼克
关于asp.net - autofac、ASP.NET 集成和 HttpRequestScoped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374196/