大きなAutoMapperConfigurationクラスを1つ使って実際のプロファイルを使用することから私のAutoMappersをロールオーバーしています。グローバルは現在、トップの上に私を得たと以前に常にプロファイルを使用してから私を停止していたハードルが結合私のninjectだったので(今のオープン/クローズの違反を許して)AutoMapperのプロファイルとユニットテスト
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
重要な部分のように見えます。私は結束を働かせることはできませんでした。このバインディングに
Bind<IMappingEngine>().ToConstant(Mapper.Engine).InSingletonScope();
私は以来、移行した: 前、私はこのバインディングた
Bind<IMappingEngine>().ToMethod(context => Mapper.Engine);
これが機能するようになりました、アプリが機能している、私は、プロファイルを持っている、と物事は良いです。
ヒットは私のユニットテストになりました。 NUnitを使って、コンストラクタの依存関係をセットアップします。
private readonly IMappingEngine _mappingEngine = Mapper.Engine;
私の[設定]メソッドでは、MVCコントローラを作成してAutoMapperConfigurationクラスを呼び出します。
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
AutoMapperConfiguration.Configure();
}
これまでに修正しました。
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
}
残念ながら、これはうまくいかないようです。マッピングは、マッピングを使用するメソッドにヒットしたときに取得されないように見えますが、マッピングが存在しないことを示す例外がAutoMapperによってスローされます。これを解決するためのテストでのマッパー定義/注入をどのように/どのように変更するかについての提案はありますか?私はIMappingEngineフィールドの定義は私の問題だと思っていますが、私が持っているオプションがわからない。あなたが持っている
おかげ
申し訳ありません。私はテストを実行し、あなたのGitは機能しますが、コンストラクタパラメータとしてエンジンを引き出すとすぐに、物事はレールから外れます。私は今夜、さらにテストするために回り回ります。 – Khepri
私は今朝、スタンドアローンのソリューションとして、あなたの期待どおりのことをしていることを確認しました。しかし、私がNinjectを利用してコンストラクタパラメータとしてIMappingEngineのインスタンスを渡そうとしている私のシナリオでは、まだ初期化されたマッピングを受け取っていません。私はgitを取り出し、初期化されたMappingEngineを返すメソッドを追加し、それをコンストラクタparamとして渡そうとしました。結果は同じでした。 – Khepri
_all_ calls/refencesを 'Mapper'(' Mapper.Initialize'、 'Mapper.Engine'など)に' MappingEngine'の新しいスタンドアロンインスタンスに置き換えようとしましたか? – Akim