1 回答
TA贡献1810条经验 获得超4个赞
看起来这里是几个问题的组合。您应该使用配置文件类加载某些程序集,并将它们注册为Profile. 在您的示例中, foreach 循环没有执行任何迭代,因为容器不包含任何注册Profile。要创建映射,您应该使用配置文件本身而不是静态Mapper类。未调用静态方法Initialize,因此未创建映射。请考虑这个例子:
public class AutoMapperConfig : Profile
{
public AutoMapperConfig()
{
// Create mapping within profile in constructor
CreateMap<ParametroCreateViewModel, Parametro>()
// ignore both unmapped properties
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.TipoDato, opt => opt.Ignore())
.ReverseMap();
}
}
[Test]
public void AutoMapperAutofacTest()
{
// Arrange
var builder = new ContainerBuilder();
// load certain assembly
builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(AutoMapperConfig)))
.AssignableTo<Profile>()
.As<Profile>(); // register as profile
builder.Register(c => new MapperConfiguration(cfg =>
{
foreach (var profile in c.Resolve<IEnumerable<Profile>>())
{
cfg.AddProfile(profile);
}
})).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();
var container = builder.Build();
var mapper = container.Resolve<IMapper>();
var param = new Parametro();
var viewModel = new ParametroCreateViewModel
{
Nombre = "Nombre",
TipoDatoId = 1
};
// Act
mapper.Map(viewModel, param);
//Assert
Assert.AreEqual(param.TipoDatoId, 1);
Assert.AreEqual(param.Nombre, "Nombre");
}
我已经用测试包装了这个例子,以使其可重现。希望能帮助到你。
- 1 回答
- 0 关注
- 248 浏览
添加回答
举报
