Asp.net MVC 3在从MVC 2升级后不使用Ninject?

Asp.net MVC 3在从MVC 2升级后不使用Ninject?,asp.net,asp.net-mvc,asp.net-mvc-3,caching,ninject,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Caching,Ninject,我有一个使用Asp.net MVC2的web应用程序。我将它升级到了MVC3,现在我发现OutputCache功能不再工作了。我创建了一个简单的测试操作,如下所示 [OutputCache(Duration = 1000000, VaryByParam = "none")] public virtual ActionResult CacheTest(string name) { string message = string.Format("{0}: Time is {1}",

我有一个使用Asp.net MVC2的web应用程序。我将它升级到了MVC3,现在我发现OutputCache功能不再工作了。我创建了一个简单的测试操作,如下所示

 [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();
        }
    }

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

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

  • 安装后,这将向项目中添加一个
    App_Start/NinjectMVC3.cs
    文件,您将在
    RegisterServices
    方法中注册Ninject模块:

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


  • 试着按照这些步骤做,也许你的问题会得到解决。

    奇怪,我无法重现这个问题。缓存适合我。如果我创建一个新的Mvc3应用程序,它可以正常工作。只有在升级的应用程序中我才有这个问题。这一切都没有意义。对我来说,这a)不能被重新编程b)只是没有意义-Ninject只是与
    OutputCacheAttribute
    无关,所以一定有什么事情搞砸了,比如有多个版本的Ninject或MVC在玩。另见