MVC 3 CookieTempDataProvider и Ninject IOC

Я пытаюсь использовать CookieTempDataProvider в сборке фьючерсов MVC 3. Я полагаю, что я "связал" это успешно, используя ninject. Ниже приведен код из моего файла app_start.cs:

[сборка: WebActivator.PreApplicationStartMethod(typeof(Web.AppStart), "Start")] пространство имен Web {открытый статический класс AppStart {открытый статический void RegisterServices(ядро IKernel) {

        kernel.Bind<ITempDataProvider>().To<CookieTempDataProvider>();
    }

    public static void Start() {
        // Create Ninject DI Kernel 
      //  IKernel kernel = new StandardKernel();
        IKernel kernel = Container;

        // Register services with our Ninject DI Container
        RegisterServices(kernel);

        // Tell ASP.NET MVC 3 to use our Ninject DI Container 
        DependencyResolver.SetResolver(new NinjectServiceLocator(kernel));

    }

    static IKernel _container;
    public static IKernel Container
    {
        get
        {
            if (_container == null)
                _container = new StandardKernel();
            return _container;
        }
    }

Однако, когда я получаю доступ к своей странице, которая использует TempData, я получаю эту ошибку, указывающую, что она все еще пытается использовать SessionTempDataProvider:

Ошибка сервера в приложении '/' Класс SessionStateTempDataProvider требует, чтобы состояние сеанса было включено. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: класс SessionStateTempDataProvider требует, чтобы состояние сеанса было включено.

Я, должно быть, что-то упустил, и я не могу понять, что это такое. Любая помощь будет наиболее ценной.

Большое спасибо

2 ответа

  1. Расширить класс контроллера

    public static void SetMessage(this Controller controller, String message)
    {
        controller.TempData["Messag"] = message;
    }
    
  2. Тогда вы можете использовать это так:

    public ActionResult Save()
    {
        //Validation... 
    
        Save(Foo);
        this.SetMessage("Item saved successfully");
        return Redirect("/Site"); 
    }
    
  3. Нет номер три:)

Я только смог заставить это работать с подходом BaseController. Процессы создания контроллера не запрашивают у Ninject ITempDataProvider.

public class BaseController : Controller
{
    protected override ITempDataProvider CreateTempDataProvider()
    {
        return new CookieTempDataProvider(HttpContext);
    }
}
Другие вопросы по тегам