开发者

Does the MVC3 ever look for an implementation of ITempDataPovider using IDependancyResolver?

It's a pretty straight forward question. I'd like to be able to provide feedback to the user about the result of a postback using TempData (since it's auto-cleared). On successful execution of an action accepting a postback, I forward to a view dedicated to showing the result of the action, and would like to use TempData but leave SessionState disabled. For now the CookieTempDataProvider included in MVC3 Futures works great, but it doesn't seem like my implementation of IDepend开发者_Python百科ancyResolver is ever called to look for anything that implements ITempDataPovider.

Was this an oversight?

Anyone else tried this yet?


you can do this by creating a new controllerfactory which is requested by 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;
    }
}

Then in your dependancy resolver set it to look for IControllerFactory, and return your ITempDataProvider

example for ninject:

_kernel.Bind<IControllerFactory>()
            .To<MyControllerFactory>().InSingletonScope();
_kernel.Bind<ITempDataProvider>()
            .ToMethod(c => new CookieTempDataProvider(HttpContext.Current))
            .InRequestScope();


Depenency injection is not used to look up instances of ITempDataProvider in MVC 3. The DI work done in MVC 3 was meant to expose the most frequently requested DI seems.

The only way to customize the instance of ITempDataProvider is to override the Controller.CreateTempDataProvider method.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜