Asp.net MVC 3 не работает с Ninject после обновления с MVC 2? - PullRequest
3 голосов
/ 15 июля 2011

У меня есть веб-приложение, которое использовало 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 Ответ

6 голосов
/ 15 июля 2011

Правильный и рекомендуемый способ использования Ninject в ASP.NET MVC 3 заключается в следующем:

  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. Удалите весь специфический код Ninject из вашего Global.asax, включая любой NinjectDependencyResolver.

Попробуйте выполнить эти шаги, и, возможно, ваша проблема будет решена.

...