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 關注
- 224 瀏覽
添加回答
舉報