gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC 3、RavenDB 和 Autofac Issue Plus 2 其他 Autofac 问题

转载 作者:行者123 更新时间:2023-12-04 06:26:53 25 4
gpt4 key购买 nike

注意:这里有 3 个问题,我没有提出单独的问题,因为它们都与相同的代码有些相关。

我有以下代码在每个应用程序的生命周期中在 Application_Start 中注册到我的 RavenDB 的连接:

var store = new DocumentStore { Url = "http://localhost:8080" };
store.Initialize();

builder.RegisterInstance(store).SingleInstance();

现在这工作正常,并且每个应用程序的生命周期应该只创建一次。现在我想将 DocumentSession 添加到 Autofac,所以我尝试在 Application_Start 中添加:
var session = store.OpenSession();
builder.RegisterInstance(session).SingleInstance();

在我的 UserRepository 中,我有以下构造函数:
 public UserRepository(DocumentStore store, DocumentSession session)

当我尝试运行它时,出现以下运行时错误:

无法解析构造函数“Void .ctor(Raven.Client.Document.DocumentStore, Raven.Client.Document.DocumentSession)”的参数“Raven.Client.Document.DocumentSession Session”

这个错误对我来说听起来像 Autofac 不认为它有一个 DocumentSession 但这就是 store.OpenSession() 返回的,所以它应该返回。有谁知道是什么导致了这个错误?我是否没有正确设置 session 变量(它与可以正常工作的商店变量相同)?

与上述问题可能有关也可能无关的另一件事是如何将对象的实例添加到每个请求而不是每个应用程序生命周期的 Autofac 中?虽然 RavenDB DocumentStore 对象应该只在应用程序生命周期中创建一次,但是 DocumentSession 应该每个请求创建一次(可能每个应用程序级别创建它会导致上述错误)。

关于 Autofac(与上面的代码略有关联),我将抛出的最后一个问题是关于释放对象。如果你看看这个教程:

http://codeofrob.com/archive/2010/09/29/ravendb-image-gallery-project-iii-the-application-lifecycle.aspx

最后一段代码:
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();

这段代码的重点是防止 session 泄漏。现在这是否也是我需要为 Autofac 担心的事情,如果是这样,我将如何在 Autofac 中做到这一点?

最佳答案

我猜你想要这样的东西:

builder.Register(c => c.Resolve<DocumentStore>().OpenSession()).InstancePerLifetimeScope();

“设置了默认的 ASP.NET 和 WCF 集成,以便 InstancePerLifetimeScope() 将一个组件附加到当前的 Web 请求或服务方法调用。” - Autofac: InstanceScope

基本上,在网络应用程序中, InstancePerLifetimeScope处理每个 HTTP 上下文方面的一个,并处理任何实现 IDisposable 的类型。 .

关于asp.net-mvc-3 - ASP.NET MVC 3、RavenDB 和 Autofac Issue Plus 2 其他 Autofac 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5516601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com