【问题标题】:ASP.NET MVC 3, RavenDB, & Autofac Issue Plus 2 Other Autofac QuestionsASP.NET MVC 3、RavenDB 和 Autofac 问题加上 2 个其他 Autofac 问题
【发布时间】:2023-03-27 04:53:02
【问题描述】:

注意:这里有 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() 返回的内容,所以它应该返回。任何人都知道会导致此错误的原因是什么?我没有正确设置会话变量(它与正常工作的存储变量相同)?

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

关于 Autofac 的最后一个问题(与上面的代码略有相关)是关于释放对象的。如果您看一下本教程:

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

最后一段代码:

ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();

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

【问题讨论】:

    标签: asp.net-mvc-3 dependency-injection autofac ravendb


    【解决方案1】:

    我猜你想要类似的东西:

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

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

    基本上,在 Web 应用程序中,InstancePerLifetimeScope 处理每个 HTTP 上下文方面,并且还处置任何实现 IDisposable 的类型。

    【讨论】:

    【解决方案2】:

    还有一个问题是 OpenSession 返回 IDocumentSession 而不是 DocumentSession。更改我的班级以查找 IDocumentSession 以及执行 Jim 建议的工作,谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      相关资源
      最近更新 更多