从IDocumentStoreListener

时间:2015-06-11 12:04:50

标签: dependency-injection ravendb asp.net-core

我有一个使用RavenDB的ASP.NET 5应用程序,我试图创建一个属性来创建一个" Changeset"文档,其中包含操作存储的所有文档的密钥。

为此目的,我创建了ActionFilterAttribute通过ServiceFilterAttribute实例化,注册为 Scoped ,在另一个 Scoped 上设置标记组件,我们将其称为ChangesetAccessor,其中包含更改列表。

IDocumentStore显然是 Singleton ,并且手动实例化侦听器(IDocumentStoreListener实现)。它需要访问当前的ChangesetAccessor,所以我想给它一个IServiceProvider的引用,这样它可以根据需要调用GetService<ChangesetAccessor>就足够了,但是它正在接收一个不同的实例。 / p>

如何获得当前请求的ChangesetAccessor&#34;来自我的听众?

1 个答案:

答案 0 :(得分:1)

您实际上可以从RequestServices访问HttpContext以获取作用域实例。这有点倒退,真的要依靠Microsoft.AspNet来做,但它会适合你的情况;有趣的是,IHttpContextAccessor也是一个单身人士,虽然它给你一个范围值。

// injected:
IHttpContextAccessor httpContextAccessor;

// in your method:
httpContextAccessor.HttpContext.RequestServices.GetService<ChangesetAccessor>()