MVC3 когда-нибудь ищет реализацию ITempDataPovider, использующую IDependancyResolver? - PullRequest
1 голос
/ 17 марта 2011

Это довольно прямой вопрос. Я хотел бы иметь возможность предоставить отзыв пользователю о результате обратной передачи с использованием TempData (так как он очищается автоматически). При успешном выполнении действия, принимающего обратную передачу, я перехожу к представлению, предназначенному для отображения результата действия, и хотел бы использовать TempData, но оставляю SessionState отключенным. На данный момент CookieTempDataProvider, включенный в MVC3 Futures, прекрасно работает, но не похоже, что моя реализация IDependancyResolver когда-либо вызывается для поиска чего-либо, что реализует ITempDataPovider.

Был ли это недосмотр?

Кто-нибудь еще пробовал это?

Ответы [ 2 ]

4 голосов
/ 04 мая 2011

Вы можете сделать это, создав новую фабрику контроллеров, которую запрашивает IDependancyResolver

/// <summary>
///   <para>Controller Factory</para>
/// </summary>
public class MyControllerFactory : DefaultControllerFactory {

    /// <summary>
    /// <para>Get instance of the controller</para>
    /// </summary>
    protected override IController GetControllerInstance(
            RequestContext requestContext, Type controllerType) {
        var controller = base.GetControllerInstance(requestContext, controllerType);

        if (controller != null
                && typeof(Controller).IsAssignableFrom(controller.GetType())) {
            // ITempDataProvider
            var tempDataProvider = DependencyResolver.Current
                                       .GetService<ITempDataProvider>();
            if (tempDataProvider != null)
                ((Controller) controller).TempDataProvider = tempDataProvider;
        }

        return controller;
    }
}

Затем в своем средстве определения зависимостей установите его для поиска IControllerFactory и верните свой ITempDataProvider

пример для объекта:

_kernel.Bind<IControllerFactory>()
            .To<MyControllerFactory>().InSingletonScope();
_kernel.Bind<ITempDataProvider>()
            .ToMethod(c => new CookieTempDataProvider(HttpContext.Current))
            .InRequestScope();
1 голос
/ 17 марта 2011

Внедрение зависимости не используется для поиска экземпляров ITempDataProvider в MVC 3. Работа DI, выполненная в MVC 3, предназначалась для выявления наиболее часто запрашиваемых представлений DI.

Единственный способ настроить экземпляр ITempDataProvider - переопределить метод Controller.CreateTempDataProvider.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...