Pau*_*ann 5 dependency-injection interface model-binding loose-coupling asp.net-mvc-3
我目前正在使用Ninject作为我的DI工作的MVC 3项目,业务对象存储在一个单独的程序集中.我遇到了控制器参数的问题,当回发CRUD操作时,我收到错误"无法创建接口的实例".我知道你不能创建一个接口的实例,但似乎我可以解决的唯一方法是使用自定义模型绑定器并通过FormCollection.这看起来非常混乱,我想尽可能多地保留项目中特定类型的代码 - 因此在任何地方接口和Ninject到DI的混凝土.自定义模型绑定不仅看起来很乱 - 我不会丢失我的DataAnnotations吗?
一些代码来描述我的内容:
public ActionResult Create()
{
// I'm thinking of using a factory pattern for this part
var objectToCreate = new ConcereteType();
return (objectToEdit);
}
[HttpPost]
public ActionResult Create(IRecord record)
{
// check model and pass to repository
if (ModelState.IsValue)
{
_repository.Create(record);
return View();
}
return View(record);
}
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过这个?你是怎么克服它的?
谢谢!
但似乎我可以解决这个问题的唯一方法是使用自定义模型绑定器
自定义模型绑定器是正确的方法.顺便说一句,你应该使用视图模型作为动作参数,而不是域模型或接口.
自定义模型绑定不仅看起来很乱 - 我不会丢失我的DataAnnotations吗?
我不知道为什么你认为自定义模型绑定器会让事情变得混乱.对我来说,这是将映射逻辑分离为可重用类的好方法.而且,不,你不会失去DataAnnotations.它们将在自定义模型绑定器将返回的具体实例上完美地工作.