2016-07-27 3 views
0

AutoMapperは静的APIと実行時にマッピングを変更する機能の両方を廃止したので、IoCマネージャなしでWebFormsアプリケーションに問題があります。Auto Mapper 5、IocとWebformsなし

としてください私はこのアプリケーションにIoCマネージャを導入することはできませんが、それは「良い」とは言えますが、アプリケーションは何年も経っていなくても正常に動作しています。現時点では正しいことはできません。将来は多分、しかし今はありません。

以前私が以前に使っていたことは、インスタンス化された各クラスのメソッドがコンストラクタによって自動的に呼び出されたことです。その方法では、私は必要があります:

Mapper.CreateMap<>() 

呼び出します。これは、次のような利点があります:

  • 私は私がリクエストごとに必要なものをマッピングされた(とプログラムの流れに応じて、マッピングのこのリストは私が必要なものに成長する)
  • すべての種類は、「ローカル」だったが - 私がやった意味しますソリューション内の他のプロジェクトを参照する必要はありません

Application_Start()でこれを1回実行するのではなく、このようなことを行うそれぞれの要求にパフォーマンスが犠牲になりました。

  1. は、私がに私はをマッピングしたいすべての種類へのアクセスを持っている「どこか」すべてのマッピングを行います。

    しかしAutoMapper 5 ...とmigrating from the static APIを読んだことは、私が今持っていることが表示されます。ですから、どこに置いても、私のソリューション内の他のすべてのアセンブリを参照する必要がありますか?

  2. アクセス可能どこかグローバルMapperConfiguration()インスタンスを格納した - 私は今、私はどこでも のHttpContext /のHttpApplication へのアクセス権を持っていることを確認する必要があります)のいずれかのHttpContextかのHttpApplication言うので、私は(MapperConfiguration.CreateMapperを呼び出すことができます。これは、最終的には、HttpContextにアクセスする必要があると言う必要のないプロジェクトを意味します。

上記の1. &の私の前提が正しければ、私は密接に結合したスパゲッティコードの大きな混乱を抱えています。

は、だから私の質問はこれです:

どのように私はAutoMapper 5は、エレガントなのIoCなしで、溶液中の多くのプロジェクト(それゆえ、多くの種類)とWebフォームアプリケーションで使うのですか?

答えて

5

AutoMapperは静的APIを廃止していません。設定を自由に変更する部分だけ。いつでもMapper.CreateMapを許可すると、私はsloooooooowのマッピングを強制されます。

そのwikiページ私は削除するのを忘れました。

https://github.com/AutoMapper/AutoMapper/wiki/Static-and-Instance-API

そして5:ここでは実際の指導です。0アップグレードガイド:

https://github.com/AutoMapper/AutoMapper/wiki/5.0-Upgrade-Guide

全体的な話は、「どこでもふりかけあなたMapper.CreateMapコールを取り除くと、初期設定に入れます」されます。あなたはプロフィールを使ってあなたを助けることができます。

しかし、Mapper.CreateMapはアプリ全体に散らばっていましたが、常に危険でした。つまり、Mapper.AssertConfigurationIsValidを使用することができませんでした。つまり、は非常にです。スキップすると危険です。構成検証をアサートできない場合は、AutoMapperを使用しないでください。

+0

私は変更の必要性を理解しており、スピードの向上、強制的な安定性などのためにそれらを受け入れています。しかし、 "...それらを初期化する" - 私の状況では(IoCなし) Application_メインWebアプリケーションのすべてのアセンブリを起動して参照しますか?私はこれの周りに他の方法を参照してください。そして、さらに私は、他のすべての議会にアクセスできるグローバルを持っていなければなりません。私はちょうどここで本当に明白な何かを見逃していないことを確認したい。明らかに、私はこれを行う際にかなり悪いコードの匂いを作ります。 – TheEdge

+0

はい、私はあなたのメインWebアプリケーションのすべてのアセンブリを参照することで問題が表示されません。プラグイン可能なポータルを構築していない限り、それは問題ではありません。しかし、ほとんどの人は、子アセンブリにProfileクラスを作成し、そこに設定を入れます。 Mapper.Initializeコールは、すべてのプロファイルを手動またはリフレクションによってすべてのプロファイルをスキャンするために追加します。 –

+0

また、どのコードがあなたに言及しているのかわからないのですか?これは、AutoMapperを設定するための推奨方法です。 –