Jon*_*han 11 asp.net-mvc mvvm separation-of-concerns automapper
我经常使用AutoMapper将模型(域)对象映射到ViewModel对象,然后由我的视图以模型/视图/视图模型模式使用.
这涉及许多"Mapper.CreateMap"语句,这些语句都必须执行,但只能在应用程序的生命周期中执行一次.
从技术上讲,我应该将它们全部保存在某个静态方法中,从我的Application_Start()方法调用它(这是一个ASP.NET MVC应用程序).
但是,在一个中心位置将许多不同的映射问题组合在一起似乎是错误的.
特别是当映射代码变得复杂并涉及格式化和其他逻辑时.
是否有更好的方法来组织映射代码,使其与所关注的ViewModel保持接近?
(我提出了一个想法 - 在每个ViewModel上有一个'CreateMappings'方法,在BaseViewModel中,在实例化时调用此方法.但是,由于该方法只应在应用程序生命周期中调用一次,因此需要一些额外的逻辑缓存已调用CreateMappings方法的ViewModel类型列表,然后仅在必要时为不在该列表中的ViewModel调用它.)
如果你真的不想使用引导程序,那么至少一个静态构造函数是确保最多调用一次CreateMap的简单方法.(与Jonathon的回答相比,没有更少的麻烦和更多的线程证明.)
public class AccountController : Controller
{
static AccountController()
{
Mapper.CreateMap<Models.User, ViewModels.UserProfile>();
Mapper.CreateMap<Models.User, ViewModels.ChangePassword>();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |