这是一个非常直截了当的问题。我希望能够使用TempData向用户提供有关回发结果的反馈(因为它已自动清除)。在成功执行接受回发的操作后,我转发到专用于显示操作结果的视图,并希望使用TempData但禁用SessionState。目前,MVC3 Futures中包含的CookieTempDataProvider
效果很好,但似乎我的IDependancyResolver
实现似乎并未调用任何实现ITempDataPovider
的内容。
这是疏忽吗?
其他人试过这个吗?
答案 0 :(得分:4)
您可以通过创建IDependancyResolver
请求的新controllerfactory来完成此操作/// <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
ninject的例子:
_kernel.Bind<IControllerFactory>()
.To<MyControllerFactory>().InSingletonScope();
_kernel.Bind<ITempDataProvider>()
.ToMethod(c => new CookieTempDataProvider(HttpContext.Current))
.InRequestScope();
答案 1 :(得分:1)
不使用Depenency注入来查找MVC 3中ITempDataProvider
的实例。在MVC 3中完成的DI工作旨在揭示最常请求的DI似乎。
自定义ITempDataProvider
实例的唯一方法是覆盖Controller.CreateTempDataProvider
方法。