Asp.net mvc MVC 2、IoC、ModelView和绑定

Asp.net mvc MVC 2、IoC、ModelView和绑定,asp.net-mvc,inversion-of-control,model-binding,Asp.net Mvc,Inversion Of Control,Model Binding,如果可以在IoC实现中注册控制器,那么为什么不能从IoC容器中创建模型视图 我目前正在使用Autofac 1.4进行IoC注入,用于以下控制器: ControllerBuilder.Current.SetControllerFactory((IControllerFactory) new AutofacControllerFactory(ContainerProvider)); 我没有办法告诉MVC在我的viewModels中使用容器作为对象工厂,但我在什么地方错过了它吗?因为控制器可能有多个

如果可以在IoC实现中注册控制器,那么为什么不能从IoC容器中创建模型视图

我目前正在使用Autofac 1.4进行IoC注入,用于以下控制器:

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

我没有办法告诉MVC在我的viewModels中使用容器作为对象工厂,但我在什么地方错过了它吗?

因为控制器可能有多个视图,每个视图都有自己的ViewModel,所以通常不会通过contstructor注入来创建它们

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

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

为什么希望IOC容器创建ViewModels?My ViewModels是生成的Html页面的精简抽象,由域服务和对象组成。如果我有一个控制器回发方法“public virtual ActionResult MyMethod(MyDomainObject MyDomainObject)”,并且MyDomainObject的构造函数具有依赖性,可以通过IoC容器来解决。我只是不明白,当控制器可以被构造函数注入时,为什么模型绑定器需要一个默认构造函数。有一个MVC方法“ControllerBuilder.Current.SetControllerFactory”,我认为应该有一个“ControllerBuilder.Current.SetModelFactory”。感谢您的回复。请参阅我上面的评论,以获得更详细的回应。其要点是,当发回控制器方法时,ModelBinder会创建对象的实例,然后用post数据中的值填充它们。为什么MVC没有能力以与控制器从IoC容器工厂提供的方式相同的方式构建viewModels?@Mike您始终可以创建一个自定义ModelBinder,它利用IoC获取ViewModel的实例。
var MyViewModel = ContainerProvider.RequestContainer.Resolve<IMyViewModel> ();
public ActionResult Details ()
{
    var model = new MyViewModel ();

    return View (model);
}