我的项目使用通常的Repository模式与Services和Unit of Work(所有Ninject注入来自NinjectModule的依赖项),但我试图从ActionFilterAttribute
访问一个服务来注入一些我显示的页面布局中的信息(来自DB)所以我不需要搞乱每个控制器上的所有操作。
当我在一个屏幕上保存到数据库并移到下一个屏幕然后返回到上一个(使用标准@Url.Action
)时出现问题:ActionFilterAttribute
Index
操作被触发但是对服务和相应存储库的调用(在属性中)会引发异常,因为DbContext has been disposed
。
访问服务时是否有任何问题,因此,DbContext
来自ActionFilterAttribute
,同时通过Property Injection注入服务?我想说明我在属性中对服务使用属性注入,因为构造函数接收2个根据Action方法的签名任意的参数,所以我唯一的选择是通过属性注入。
如果您需要一些代码,请告诉我,我会更新问题。
答案 0 :(得分:3)
我在以下问题中找到了解决问题的方法: Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?
将Mark Seeman的答案与striplingwarrior的评论相结合是解决方案。
基本上我将ActionFilterAttribute拆分为一个仅仅装饰我的Actions并保留我以后需要的参数的属性,还有一个ActionFilter,它检查了Action的自定义属性,如果我的属性存在,那么它会从我想要的数据中注入DB进入ViewBag。之后所有东西都与Ninject的BindFilter扩展名绑定,所以它只适用于它需要的方法。