从 IDocumentStoreListener 获取作用域组件
Getting a scoped component from a IDocumentStoreListener
我有一个使用 RavenDB 的 ASP.NET 5 应用程序,我正在尝试创建一个属性,该属性将创建一个 "Changeset" 文档,其中包含操作存储的所有文档的键.
为此,我创建了一个通过 ServiceFilterAttribute
实例化的 ActionFilterAttribute
,它注册为 Scoped,它在另一个 [=27] 上设置了一个标志=]Scoped 组件,我们称它为 ChangesetAccessor
,它包含更改列表。
IDocumentStore
显然是一个Singleton,监听器(IDocumentStoreListener
实现)是手动实例化的。它需要访问当前 ChangesetAccessor
,所以我想给它一个 IServiceProvider
的引用,这样它就可以根据需要调用 GetService<ChangesetAccessor>
就足够了,但它正在接收一个不同的实例。
如何从听众那里获得 "current request" 的 ChangesetAccessor
?
您实际上可以从 HttpContext
访问 RequestServices
以获取作用域实例。这有点倒退,确实需要 Microsoft.AspNet
来完成,但它会适合您的情况;有趣的是,IHttpContextAccessor
也是一个单例,尽管它给你一个作用域值。
// injected:
IHttpContextAccessor httpContextAccessor;
// in your method:
httpContextAccessor.HttpContext.RequestServices.GetService<ChangesetAccessor>()
我有一个使用 RavenDB 的 ASP.NET 5 应用程序,我正在尝试创建一个属性,该属性将创建一个 "Changeset" 文档,其中包含操作存储的所有文档的键.
为此,我创建了一个通过 ServiceFilterAttribute
实例化的 ActionFilterAttribute
,它注册为 Scoped,它在另一个 [=27] 上设置了一个标志=]Scoped 组件,我们称它为 ChangesetAccessor
,它包含更改列表。
IDocumentStore
显然是一个Singleton,监听器(IDocumentStoreListener
实现)是手动实例化的。它需要访问当前 ChangesetAccessor
,所以我想给它一个 IServiceProvider
的引用,这样它就可以根据需要调用 GetService<ChangesetAccessor>
就足够了,但它正在接收一个不同的实例。
如何从听众那里获得 "current request" 的 ChangesetAccessor
?
您实际上可以从 HttpContext
访问 RequestServices
以获取作用域实例。这有点倒退,确实需要 Microsoft.AspNet
来完成,但它会适合您的情况;有趣的是,IHttpContextAccessor
也是一个单例,尽管它给你一个作用域值。
// injected:
IHttpContextAccessor httpContextAccessor;
// in your method:
httpContextAccessor.HttpContext.RequestServices.GetService<ChangesetAccessor>()