2017-07-28 7 views
0

私はDDDアプローチで単純なドメインモデルを使用しているため、インスタンスを作成する方法はコンストラクタのみです。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. 

を、無視する、カスタムリゾルバを追加する、またはソース/宛先タイプを変更する の場合一致するコンストラクタは、引数なしのctorのを追加していないオプションの引数を追加、またはコンストラクタのパラメータ」

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が助けるだろう。私たちが実行して失敗することができる[要点](https://gist.github.com/lbargaoanu/9c7233441c3a3413cc2b9b9ebb5964a9)を作ってください。 –