为了在 ASP.NET WebApi 中刷新对 RavenDB 的更改,我创建了以下操作过滤器:
public class RavenDbUnitOfWorkAttribute : ActionFilterAttribute
{
public Func<IDocumentSession> SessionFactory { get; set; }
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
var session = SessionFactory.Invoke();
if (session != null && actionExecutedContext.Exception == null)
{
session.SaveChanges();
}
base.OnActionExecuted(actionExecutedContext);
}
}
为了注入,IDocumentSession
我创建了一个自定义IFilterProvider
,它遍历每个过滤器并使用 setter 注入(StructureMap)设置任何依赖项。
我想知道实例的IFilterProvider
范围如何。阅读这篇文章,控制器似乎是根据请求创建的。
目前,我正在IDocumentSession
使用 StructureMap 明确界定每个请求的范围。问题是,如果我改为依赖IDependencyScope
(使用嵌套容器的)相同的实例会IDocumentSession
被注入到我的动作过滤器中吗?
[更新]
进一步测试,似乎动作过滤器不使用与控制器相同的依赖范围。但是,我不希望在我的 Controller 中有用于刷新会话的代码。