我的项目使用带有服务和工作单元的常用存储库模式(全部使用 Ninject 从 NinjectModule 注入(inject)依赖项),但我正在尝试从 ActionFilterAttribute
访问服务在我显示的页面布局中注入(inject)一些信息(来自数据库),这样我就不需要弄乱每个 Controller 上的所有操作。
当我在一个屏幕上保存到数据库并移动到下一个屏幕然后返回到上一个屏幕时(使用标准 @Url.Action
),问题就来了: ActionFilterAttribute
对于 Index
操作被触发,但对服务和相应存储库(在属性内)的调用抛出异常,因为 DbContext has been disposed
.
访问服务是否有任何问题,并因此出现 DbContext
来自 ActionFilterAttribute
在通过属性注入(inject)注入(inject)服务时?我想说明一下,我在属性中为服务使用属性注入(inject),因为构造函数接收 2 个参数,这些参数是任意的,具体取决于 Action 方法的签名,所以我唯一的选择是通过属性注入(inject)。
如果您需要一些代码,请告诉我,我会更新问题。
最佳答案
我在以下问题中找到了问题的解决方案: Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?
合并Mark Seeman用 striplingwarrior 回答的评论是它的解决方案。
基本上,我将我的 ActionFilterAttribute 拆分为一个只装饰我的 Action 并保留我以后需要的参数的属性,以及一个检查 Action 的自定义属性的 ActionFilter,如果我的属性存在,那么它会注入(inject)我想要的数据数据库进入 ViewBag。所有内容稍后都与 Ninject 的 BindFilter 扩展绑定(bind),因此它仅适用于它需要的方法。
关于dependency-injection - ActionFilterAttribute ninject 注入(inject) - DbContext 已被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329943/