neo*_*112 3 asp.net entity-framework dependency-injection ninject asp.net-web-api
我正在尝试将 UOW 容器注入到 WebApi 2 actionfilter 属性中
public class VerifyApiToken : ActionFilterAttribute
{
[Inject]
public IUOW Uow { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
//get and save data to any repository in the uow container
base.OnActionExecuting(actionContext);
}
Run Code Online (Sandbox Code Playgroud)
UOW 容器按照预期进行注入,并且在第一个请求时一切正常。在后续请求中,EF 抛出异常,表明 DbContext 已被释放。
所有依赖项都绑定在请求范围内,因此底层 dbcontext 被释放是正常的。在 WebApi 控制器中使用构造函数注入时,一切正常,在每个请求上都会重新创建资源,为什么在尝试在 ActionFilterAttributes 中使用属性注入时不重新创建资源,如何解决这个问题?
我正在使用的 IFilterProvider:
public IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)
{
IEnumerable<FilterInfo> controllerFilters = actionDescriptor.ControllerDescriptor.GetFilters().Select(instance => new FilterInfo(instance, FilterScope.Controller));
IEnumerable<FilterInfo> actionFilters = actionDescriptor.GetFilters().Select(instance => new FilterInfo(instance, FilterScope.Action));
IEnumerable<FilterInfo> filters = controllerFilters.Concat(actionFilters);
foreach (FilterInfo filter in filters)
{
_kernel.Inject(filter.Instance);
}
return filters;
}
Run Code Online (Sandbox Code Playgroud)
“Inject”方法描述说“注入指定的实例,而不管理其生命周期”。因此,我认为我的VerifyApiToken属性在每个应用程序生命周期(基本上是Application_Start)注入一次,因此在以下请求中使用相同的实例(当然带有已处置的DbContext)。是否可以将 Ninject 配置为对 ActionFilterAttributes 中的每个请求使用新的 IUOW 容器?
归档时间: |
|
查看次数: |
1520 次 |
最近记录: |