MVC 2,IoC,ModelView和Binding

时间:2010-04-08 19:36:21

标签: asp.net-mvc inversion-of-control model-binding

如果您可以在IoC实施中注册控制器,那么为什么不能从IoC容器中创建ModelView?

我目前正在使用Autofac 1.4进行控制器的IoC注入,具体如下:

ControllerBuilder.Current.SetControllerFactory((IControllerFactory) new AutofacControllerFactory(ContainerProvider));

我没有看到告诉MVC使用容器作为我的viewModel的对象工厂的方法,但我是否在某处错过了它?

1 个答案:

答案 0 :(得分:1)

由于你的控制器可能有多个视图,每个视图都有自己的ViewModel,你通常不会通过contstructor injection创建它们。

因此,您可以在IoC中注册ViewModel,但这意味着在控制器中提供服务定位器以获取ViewModel的实例。

builder.Register<MyViewModel> ().As<IMyViewModel> ().FactoryScoped ();

并在您的控制器中

var MyViewModel = ContainerProvider.RequestContainer.Resolve<IMyViewModel> ();

这不是管理控制器ViewModel的典型方法,除非你想以某种方式使它们变得动态。

在大多数情况下,您只需在控制器方法

中创建ViewModel的实例
public ActionResult Details ()
{
    var model = new MyViewModel ();

    return View (model);
}