如果您可以在IoC实施中注册控制器,那么为什么不能从IoC容器中创建ModelView?
我目前正在使用Autofac 1.4进行控制器的IoC注入,具体如下:
ControllerBuilder.Current.SetControllerFactory((IControllerFactory) new AutofacControllerFactory(ContainerProvider));
我没有看到告诉MVC使用容器作为我的viewModel的对象工厂的方法,但我是否在某处错过了它?
答案 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);
}