【发布时间】:2012-07-23 13:34:15
【问题描述】:
为了在 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 的实例是如何作用域的。阅读this article 似乎控制器是根据请求创建的。
目前,我正在使用 StructureMap 明确界定每个请求的 IDocumentSession 范围。问题是,如果我改为依赖 IDependencyScope(使用嵌套容器),是否会将相同的 IDocumentSession 实例注入到我的操作过滤器中?
[更新]
进一步测试,似乎动作过滤器不使用与控制器相同的依赖范围。但是,我不希望在我的 Controller 中有用于刷新会话的代码。
【问题讨论】:
-
我没有答案,但本文讨论的是过滤器和 DI bradwilson.typepad.com/blog/2010/07/…
-
@suing 这是指 MVC 中的 DI。我的问题是指 ASP.NET WebApi 中的 DI。两者完全不同。
标签: structuremap asp.net-web-api ravendb