我有一个非常简单的问题...... 是否可以像这样设置AutoMapper:
public IMapper Init()
{
var config = new MapperConfiguration(cfg =>
{
cfg = MappingModelsToViewModels(cfg);
});
return config.CreateMapper();
}
我将每个映射分成这样的方法:
public IMapperConfigurationExpression MappingModelsToViewModels(IMapperConfigurationExpression cfg)
{
cfg = SKU(cfg);
cfg = Lot(cfg);
cfg = SalesRate(cfg);
cfg = SpecialSalesRate(cfg);
cfg = Order(cfg);
//...
return cfg;
}
public IMapperConfigurationExpression SKU(IMapperConfigurationExpression cfg)
{
// HTTPGET
cfg.CreateMap<SKU, SKUViewModel>() //...
return cfg;
}
我问,因为我收到了这个错误:
Mapper未初始化。使用适当的方式调用Initialize 组态。如果您尝试通过a使用映射器实例 容器或其他,请确保您没有任何电话 静态Mapper.Map方法,如果您正在使用ProjectTo或 UseAsDataSource扩展方法,请确保传入 适当的IConfigurationProvider实例。
我通过将部分映射代码移动到新的MapperConfiguration进行了测试,并且它正在运行。
谢谢,
大卫
答案 0 :(得分:0)
有很多方法可以配置AutoMapper。我个人喜欢以下方法 -
protected void Application_Start()
{
...
AutoMapperConfiguration.Initialize();
...
}
public static class AutoMapperConfiguration
{
public static void Initialize()
{
MapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SKU, SKUViewModel>();
cfg.CreateMap<SKUViewModel, SKU>();
cfg.CreateMap<Lot, LotViewModel>();
cfg.CreateMap<LotViewModel, Lot>();
});
Mapper = MapperConfiguration.CreateMapper();
}
public static IMapper Mapper { get; private set; }
public static MapperConfiguration MapperConfiguration { get; private set; }
}
用法就像 -
SKUViewModel model = AutoMapperConfiguration.Mapper.Map<SKU, SKUViewModel>(sku);
[Test]
public void AutoMapperConfigurationInitializeValid()
{
AutoMapperConfiguration.Initialize();
AutoMapperConfiguration.MapperConfiguration.AssertConfigurationIsValid();
}
答案 1 :(得分:0)
我通常使用profile
选项automapper
来完成此操作。如果同时具有灵活性和较少的地方可以修改 -
个人资料定义,来自AutoMapper
Profile
class-
public class Profile1 : Profile
{
public Profile1(){ //... for version < 5, use protected void Configure
CreateMap<SKU, SKUModel>()
//........
}
}
然后初始化自动播放器和加载配置文件 -
MapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.AddProfile<Profile1>();
});
Mapper = MapperConfiguration.CreateMapper();
或者您可以让AutoMapper
自行检测个人资料 -
// Assembly objects
Mapper.Initialize(cfg => cfg.AddProfiles(/*.... supply the assembly here ...*/));
更多信息可以在这里找到 -
https://github.com/AutoMapper/AutoMapper/wiki/Configuration#profile-instances