8

我有我的项目,它使用带有服务和工作单元的通常存储库模式(所有这些都使用 Ninject 从 NinjectModule 注入依赖项),但我试图从 an 访问服务ActionFilterAttribute以在布局中注入一些信息(来自 DB)我展示的页面,所以我不需要弄乱每个控制器上的所有操作。

当我在一个屏幕上保存到数据库并移动到下一个屏幕然后返回到上一个屏幕(使用标准@Url.Action)时,问题就出现了:触发了ActionFilterAttributeforIndex操作,但调用服务和相应的存储库(在属性内)抛出一个例外,因为DbContext has been disposed.

访问服务是否有任何问题,因此,DbContext通过ActionFilterAttribute属性注入注入服务时有什么问题吗?我想说明一下,我在属性中对服务使用属性注入,因为构造函数接收 2 个参数,这些参数是任意的,具体取决于 Action 方法的签名,所以我唯一的选择是通过属性注入。

如果您需要一些代码,请告诉我,我会更新问题。

4

1 回答 1

3

我在以下问题中找到了我的问题的解决方案: Injecting dependencies into ASP.NET MVC 3 action filters。这种方法有什么问题?

Mark Seeman的回答与striplingwarrior的评论结合起来就是解决方案。

基本上,我将我的 ActionFilterAttribute 拆分为一个仅修饰我的 Actions 并保留我以后需要的参数的 Attribute,还拆分为一个 ActionFilter 来检查 Action 的自定义属性,如果我的属性存在,那么它将我想要的数据从 DB 注入视图包。之后一切都与 Ninject 的 BindFilter 扩展绑定,因此它仅适用于它需要的方法。

于 2013-01-13T05:33:41.403 回答