Bre*_*ogt 2 c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2
我使用ASP.NET MVC 3与Razor和Autofac依赖注入.
我正在考虑创建一个通用映射器.目前我AutoMapper用于我的域和视图模型之间的映射.它可以是任何映射框架,但我使用的是AutoMapper.
这是我的IMapper界面:
public interface IMapper
{
object Map(object source, Type sourceType, Type destinationType);
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个实现这个IMapper接口的IBankMapper接口.我这样做的原因是因为我可以有很多不同的映射器.使用依赖注入我可以知道我可以注入什么实例.所以对于IBankMapper我会注入BankMapper,ICategoryMapper我会注入CategoryMapper.
IBankMapper 接口:
public interface IBankMapper : IMapper
{
}
Run Code Online (Sandbox Code Playgroud)
BankMapper 类:
public class BankMapper : IBankMapper
{
static BankMapper()
{
Mapper.CreateMap<Bank, EditBankViewModel>();
Mapper.CreateMap<EditBankViewModel, Bank>();
}
public object Map(object source, Type sourceType, Type destinationType)
{
return Mapper.Map(source, sourceType, destinationType);
}
}
Run Code Online (Sandbox Code Playgroud)
随着程序的增长,映射器类也将如此.有没有办法可以创建一个通用映射器,可以在整个应用程序中使用?这可能吗?
完全没有必要创建任何映射器类.
您需要做的就是确保Mapper.CreateMap在申请开始时致电.然后,您可以使用Mapper.Map您的映射.
通常,我使用单个方法创建一个静态类来处理我的地图的创建.它看起来像:
public static class Transformers
{
public static void Register()
{
Mapper.CreateMap<Bank, EditBankViewModel>();
Mapper.CreateMap<EditBankViewModel, Bank>();
Mapper.CreateMap<Account, EditAccountViewModel>();
Mapper.CreateMap<EditAccountViewModel, Account>();
// And so on. You can break them up into private methods
// if you have too many.
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在Global.asax中调用该方法确保它在必要时运行.在我的应用程序中的任何其他位置,我可以随意调用Mapper.Map任何已配置的映射:
protected void Application_Start()
{
Transformers.Register();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |