从MVC 2升级后,Asp.net MVC 3没有与Ninject合作?

时间:2011-07-15 09:56:45

标签: asp.net asp.net-mvc asp.net-mvc-3 caching ninject

我有一个使用 Asp.net MVC2 的网络应用程序。我将其升级为 MVC 3 ,现在我发现 OutputCache 功能不再有效。我创建了一个简单的Test动作,如下所示。

 [OutputCache(Duration = 1000000, VaryByParam = "none")]
 public virtual ActionResult CacheTest(string name)
  {
     string message = string.Format("{0}: Time is {1}", name, DateTime.Now.ToLongTimeString());
     ViewData.Add("Message", message);
     return View();
  }

这总是提供当前时间,表明未缓存。我在这里错过了什么吗?

更多信息:如果我创建一个新的Mvc3应用程序,它可以正常工作。它只在升级的应用程序中,我有这个问题。

更新:我也在使用Ninject。如果我停止使用Ninject OutputCache开始工作。

public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}.aspx/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            RegisterDependencyResolver();

            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);
        }

        protected void RegisterDependencyResolver()
        {
            var kernel = CreateKernel();
            DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
        }

        protected IKernel CreateKernel()
        {
            return new StandardKernel();
        }
    }

1 个答案:

答案 0 :(得分:6)

在ASP.NET MVC 3中使用Ninject的正确和推荐方法如下:

  1. 安装ninject.mvc3 NuGet包。这将确保您获得与ASP.NET MVC 3兼容的最新版本。

  2. 安装完成后,会在项目中添加App_Start/NinjectMVC3.cs文件,并且在RegisterServices方法中,您将注册Ninject模块:

    private static void RegisterServices(IKernel kernel)
    {
        var modules = new INinjectModule[]
        {
            // your modules here
        };
        kernel.Load(modules);
    }        
    
  3. 从Global.asax中删除所有Ninject特定代码,包括任何NinjectDependencyResolver

  4. 尝试按照这些步骤操作,也许您的问题会得到解决。