bar*_*oma 4 c# generics automapper
我想用通用扩展方法映射我的对象.
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Address HomeAddress { get; set; }
public string GetFullName()
{
return string.Format(“{0} {1}”, FirstName, LastName);
}
}
Run Code Online (Sandbox Code Playgroud)
这是viewmodel
public class CustomerListViewModel
{
public string FullName { get; set; }
public string Email { get; set; }
public string HomeAddressCountry { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我正在创建地图, Mapper.CreateMap<Customer, CustomerListViewModel>();
我想创建一个扩展方法
public static class MapperHelper
{
public static CustomerListViewModel ToViewModel(this Customer cust)
{
return AutoMapper.Mapper.Map<Customer, CustomerListViewModel>(cust);
}
}
Run Code Online (Sandbox Code Playgroud)
但我想制作通用的帮手:
public static class MapperHelper<TSource, TDest>
{
public static TDest ToViewModel(this TSource cust)
{
return AutoMapper.Mapper.Map<TSource, TDest>(cust);
}
}
Run Code Online (Sandbox Code Playgroud)
给出错误:扩展方法只能在非泛型的非嵌套静态类中声明
如果我不能创建泛型,我应该为所有映射创建帮助类.有什么方法可以解决吗?
甚至比这些解决方案更好的是使用非通用Map方法:
public static class MapperHelper
{
public static TDest MapTo<TDest>(this object src)
{
return (TDest)AutoMapper.Mapper.Map(src, src.GetType(), typeof(TDest));
}
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中:
var model = customter.MapTo<CustomerViewModel>();
Run Code Online (Sandbox Code Playgroud)
现在,您不需要泛型方法中的多余Source类型.