2017-07-28 73 views
0

我在DDD方法中有简单的域模型,因此创建实例的唯一方法是使用构造函数。Automapper和使用DDD验证配置

public CashCaseDifference(
     double amount, 
     double originalAmount, 
     double originalFcyAmount, 
     CashCaseDifferenceCurrency currency, 
     CashCaseDifferenceSource source, 
     CashCaseDifferenceType type) 
    { 
     this.Amount = amount; 
     this.OriginalAmount = originalAmount; 
     this.OriginalFcyAmount = originalFcyAmount; 
     this.Currency = currency; 
     this.Source = source; 
     this.Type = type; 
    } 

我试图单元测试配置时遇到问题。

映射简档:

this.CreateMap<CashCaseOut, CashCaseDifference>() 
       .ConstructUsing(source => new CashCaseDifference(
        source.Amount.GetValueOrDefault(), 
        source.OriginalAmount.GetValueOrDefault(), 
        source.OriginalFcyAmount.GetValueOrDefault(), 
        (CashCaseDifferenceCurrency) source.Currency.GetValueOrDefault(), 
        (CashCaseDifferenceSource) source.SourceOfDifference.GetValueOrDefault(), 
        (CashCaseDifferenceType) source.Type.GetValueOrDefault())); 

而我的单元测试方法:

Mapper.Initialize(
      cfg => { cfg.AddProfile(new CashCaseOutToCashCaseDifference()); }); 
     Mapper.AssertConfigurationIsValid();); 

它返回错误性质没有映射:

Unmapped members were found. Review the types and members below. 

“添加自定义映射表达式,忽略,添加自定义解析器或修改源/目标类型 没有匹配的构造函数中添加一个无参数的构造函数,加上可选的参数,或者映射所有构造函数参数”

Unmapped properties: Source 

编辑的:

建设不能正常工作。

 Mapper.Initialize(cfg => 
     { 
      cfg.AddProfile(new CashCaseOutToCashCaseDifference()); 
     }); 
     Mapper.AssertConfigurationIsValid(); 

    public CashCaseOutToCashCaseDifference() 
    { 
     this.CreateMap< 
       CashDiffMS.Client.Models.CashCaseOut, 
       Core.CashCases.Domain.Differences.CashCaseDifference>() 
      .ForCtorParam("amount", opt => opt.MapFrom(src => src.Amount)) 
      .ForCtorParam("originalAmount", opt => opt.MapFrom(src => src.OriginalAmount)) 
      .ForCtorParam("originalFcyAmount", opt => opt.MapFrom(src => src.OriginalFcyAmount)) 
      .ForCtorParam("currency", opt => opt.MapFrom(src => src.Currency)) 
      .ForCtorParam("source", opt => opt.MapFrom(src => src.SourceOfDifference)) 
      .ForCtorParam("type", opt => opt.MapFrom(src => src.Type)); 
    } 

public CashCaseDifference(
     double amount, 
     double originalAmount, 
     double originalFcyAmount, 
     CashCaseDifferenceCurrency currency, 
     CashCaseDifferenceSource source, 
     CashCaseDifferenceType type) 
    { 
     this.Amount = amount; 
     this.OriginalAmount = originalAmount; 
     this.OriginalFcyAmount = originalFcyAmount; 
     this.Currency = currency; 
     this.Source = source; 
     this.Type = type; 
    } 

结果是一样的:Unmapped properties: Source

回答

0

那是因为你是用手工绘制。你应该让AM做到这一点。该文档是here

+0

它不工作。 – Nerf

+0

这应该工作。 repro会有所帮助。制作[gist](https://gist.github.com/lbargaoanu/9c7233441c3a3413cc2b9b9ebb5964a9),我们可以执行并看到失败。 –