假设在我的ASP。. NET MVC项目,我有一个ViewModel,用于编辑产品的表单。在许多其他字段中,我有一个产品类型列表,我希望用户能够从中选择,在一个下拉列表中。
当我将域对象映射到ViewModel时,我调用了一个服务来获取域对象,然后使用AutoMapper将其映射到ViewModel。为了填充产品类型列表的下拉列表,我调用了另一个服务,它从数据库中获取数据并使用它填充ViewModel上的另一个属性。
我正在纠结的是,是否在控制器中显式调用次要服务更好,而不是潜在地将该调用放入自定义ValueResolver类并配置我的映射以使用它。
我喜欢从我的控制器中删除对产品类型服务的依赖关系的前景(因为有很多这样的依赖关系,控制器最终会有很多依赖关系),但我担心将这种逻辑(可能会影响数据库)放入ValueResolver是对ValueResolver的不适当使用,并且可能违反我所说的最小意外原则。(也就是说,我可能不希望映射代码引起数据库请求。)
这是一个常见的事情使用ValueResolver ?
AutoMapper邮件列表中Jimmy Bogard的回复:
是的,这绝对不罕见。下拉列表数据源....伙计,它们是我们ViewModel世界里最难弄清楚的东西。
请记住,您需要担心POST场景、重新填充验证失败的信息等。