2012-09-04 19 views
2

我在MVC4项目中使用NInject作为默认容器和NInjectResolver class。注射效果很好。定制IActionInvoker和异步操作

现在我试图替换默认IActionInvoker为了提供自定义的JSON序列化,如here所示。

这似乎如果动作返回JsonResult工作正常,但它扼流圈Task<JsonResult>(即使我绑定IActionInvoker到默认ControllerActionInvoker)。

当我将其转换为异步操作时,操作返回(而不是JSON),此文本为:System.Threading.Tasks.Task<System.Web.Mvc.JsonResult> - 就像调用ToString()一样。

我该如何解决这个问题?

回答

3

由于您正在使用基于任务的异步,因此您必须查看注入AsyncControllerActionInvoker的实例。

+0

谢谢 - 你能澄清一下吗:这也适用于非异步操作吗?如果没有,我应该为IAsyncInvoker和IActionInvoker的ControllerActionInvoker绑定一个这样的调用吗?换句话说,我怎样才能以最小的努力/代码来处理这两种情况? – georgiosd

+2

您只需要注册异步,因为从MVC 4开始,所有控制器都支持异步,但是如果您有同步方法,那么它们将像往常一样工作。 'Controller.CreateActionInvoker()'默认返回一个'AsyncControllerActionInvoker',它最终知道如何处理同步和异步模式(通过['AsyncActionMethodSelector.GetActionDescriptorDelegate()'](http://aspnetwebstack.codeplex.com/SourceControl/changeset /view/c97168711de8#src%2fSystem.Web.Mvc%2fAsync%2fAsyncActionMethodSelector.cs))。 – marcind