2017-07-28 71 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),我們可以執行並看到失敗。 –