Tyl*_*ght 1 asp.net-mvc domain-driven-design automapper
我正在尝试将服务结果映射到特定的视图模型.我有一个名为Category的实体,其中包含Id和Name.我通过存储库ICategoryRepository公开它.我有一个服务IInfrastructureService使用类别存储库GetAllCategories.GetAllCategories返回一个IList.在我的MVC项目中.我有一个名为NavigationController的控制器.此控制器需要调用GetAllCategories服务.我想将此结果映射到这样的结构:
public class CategoryViewModel {
public Guid CategoryId { get; set; }
public string Name { get; set; }
}
public class CategoryMenuViewModel {
public IList<CategoryViewModel> Categories { get; set; }
public CategoryViewModel SelectedCategory { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想用Automapper来做这件事.在我的Application_Start()中,我创建了地图:
Mapper.CreateMap<Category, CategoryViewModel>();
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中:
public ViewResult CategoryMenu()
{
CategoryMenuViewModel viewModel = new CategoryMenuViewModel();
Mapper.CreateMap<Category, CategoryViewModel>();
viewModel.Categories = Mapper.Map<IList<Category>, IList<CategoryViewModel>>(_infrastructureService.GetAllCategories());
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
这给了我这个例外:程序集中的重复类型名称.
我不确定我在这里做错了什么.任何帮助或指导都会摇滚!
你为什么要Mapper.CreateMap在控制器里面打电话?这应该只在AppDomain的整个生命周期内调用一次,最好是在Application_Start.在控制器内部,您Mapper.Map只能调用该方法.
获得异常的原因是因为您已经在Application_Start中的Category和CategoryViewModel之间定义了一个映射(.CreateMap).所以:
public ViewResult CategoryMenu()
{
var categories = _infrastructureService.GetAllCategories();
CategoryMenuViewModel viewModel = new CategoryMenuViewModel();
viewModel.Categories = Mapper.Map<IList<Category>, IList<CategoryViewModel>>(categories);
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1501 次 |
| 最近记录: |