私のプロジェクトでは、拡張メソッド.ToViewModel()
を実装することで、AutoMapperの使用を簡単にしようとしています。基本的には標準的な呼び出しを包むラッパーになりますが、何かをマッピングするたびにどれくらい入力しなければならないか迷ってしまうことがよくあります。 2の比較:AutoMapperを使用した.ToViewModel()の実装
var viewModel = Mapper.Map<DomainEntityType, ViewModelType>(entity);
// or...
var viewModel = entity.ToViewModel();
私はすべての私のエンティティがIEntity
を拡張させてきた、とエンティティに対応するすべてのviewmodelsは()IViewModel<IEntity>
を拡張し、次の拡張メソッドを書かれた)=数2は甘いだろうと感じ
public static IViewModel<TEntity> ToViewModel<TEntity>(this TEntity entity)
where TEntity : IEntity
{
return Mapper.Map<TEntity, IViewModel<TEntity>>(entity);
}
しかし、私はこの飛行をすることができません。
次のNUnitテストでは、これをテストしようとしています(Assert.AreEqual
が実際にテストしているかどうかはわかりませんが、参照平等が必要なのでしょうか?テストはメッセージ私のテストは間違ったことをテストされるかもしれないという事実を除いて
Expected: <Castle.Proxies.IViewModel`1Proxy> But was: <Castle.Proxies.IViewModel`1Proxy>
[Test]
public void DomainEntityTypeMapsViewModelType()
{
var entity = new DomainEntityType();
var oldskool = Mapper.Map<DomainEntityType, IViewModel<Entity>>(entity);
var extension = inspectionObject.ToViewModel();
Assert.AreEqual(oldskool, extension);
}
で失敗し、私はAutoMapperがどのように機能するかについての基本的な何かが足りないのですか? AutoMapperはこれまでに何かをインターフェイスに正しくマッピングできますか? (私はクラスEntityViewModel
を持っていますが、それはViewModel<Entity>
を実装していますが、私はAutoMapperに特に言及していません...)
ジェネリック型パラメータの制約を_TEntity:Entity_のどこに変更してみてください。 Btw、デバッガで2つのオブジェクトが同じで、期待通りに見えるようにしようとしていますか?また、Assert.AreEqualをAssert.AreSameに変更しようとすると、2つのオブジェクトが同じオブジェクトインスタンスを参照しているかどうかを確認します – sll
これを達成する方法を知りたいと思います... – Baldy
@Baldy:私はこれを解決しました - 私の答えを見てくださいこの質問に。 –