我有一个使用RavenDB的ASP.NET 5应用程序,我试图创建一个属性来创建一个" Changeset"文档,其中包含操作存储的所有文档的密钥。
为此目的,我创建了ActionFilterAttribute
通过ServiceFilterAttribute
实例化,注册为 Scoped ,在另一个 Scoped 上设置标记组件,我们将其称为ChangesetAccessor
,其中包含更改列表。
IDocumentStore
显然是 Singleton ,并且手动实例化侦听器(IDocumentStoreListener
实现)。它需要访问当前的ChangesetAccessor
,所以我想给它一个IServiceProvider
的引用,这样它可以根据需要调用GetService<ChangesetAccessor>
就足够了,但是它正在接收一个不同的实例。 / p>
如何获得当前请求的ChangesetAccessor
&#34;来自我的听众?
答案 0 :(得分:1)
您实际上可以从RequestServices
访问HttpContext
以获取作用域实例。这有点倒退,真的要依靠Microsoft.AspNet
来做,但它会适合你的情况;有趣的是,IHttpContextAccessor
也是一个单身人士,虽然它给你一个范围值。
// injected:
IHttpContextAccessor httpContextAccessor;
// in your method:
httpContextAccessor.HttpContext.RequestServices.GetService<ChangesetAccessor>()