0

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

我目前正在为控制器使用 Autofac 1.4 进行 IoC 注入,具有以下功能:

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

我看不到一种方法可以告诉 MVC 将容器用作我的 viewModel 的对象工厂,我是否在某个地方错过了它?

4

1 回答 1

1

由于您的控制器可能有多个视图,每个视图都有自己的 ViewModel,您通常不会通过构造函数注入来创建它们。

所以你可以在你的 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);
}
于 2010-04-08T20:27:06.440 回答