[解決済み】AutoMapper.CreateMapsをどこに配置するか?
質問
私は
AutoMapper
の中に
ASP.NET MVC
のアプリケーションで使用することができます。を移動させた方がいいと言われました。
AutoMapper.CreateMap
はオーバーヘッドが大きいので、他の場所に移動してください。これらの呼び出しを1か所にまとめるために、どのようにアプリケーションを設計すればよいのか、あまりよくわかりません。
私はウェブ層、サービス層、データ層を持っています。それぞれが独立したプロジェクトです。私は
Ninject
ですべてをDIします。私が活用するのは
AutoMapper
をWebとサービスの両方の層で使用します。
の設定はどうなっていますか?
AutoMapper
のCreateMapは?どこに置きますか?どのように呼び出すのですか?
解決方法は?
静的なクラスであれば問題ありません。重要なのは 規約 .
私たちの
コンベンション
は、各レイヤー(ウェブ、サービス、データ)ごとに
AutoMapperXConfiguration.cs
というメソッドを持っています。
Configure()
で、ここで
X
はレイヤーです。
は、その
Configure()
メソッドは、次に
private
メソッドを各エリアごとに用意しました。
以下は、Web Tierの設定例です。
public static class AutoMapperWebConfiguration
{
public static void Configure()
{
ConfigureUserMapping();
ConfigurePostMapping();
}
private static void ConfigureUserMapping()
{
Mapper.CreateMap<User,UserViewModel>();
}
// ... etc
}
各集約(User, Post)ごとにメソッドを作成することで、きれいに分離することができます。
そして、あなたの
Global.asax
:
AutoMapperWebConfiguration.Configure();
AutoMapperServicesConfiguration.Configure();
AutoMapperDomainConfiguration.Configure();
// etc
これは言葉のインターフェイスのようなもので、強制することはできませんが、それを期待することで、必要に応じてコーディング(とリファクタリング)ができます。
EDITです。
私は今、AutoMapperを使用しています。 プロフィル ということで、上の例はこうなります。
public static class AutoMapperWebConfiguration
{
public static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.AddProfile(new UserProfile());
cfg.AddProfile(new PostProfile());
});
}
}
public class UserProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<User,UserViewModel>();
}
}
よりすっきり/より堅牢になりました。
関連
-
[解決済み] データベースに 'AspNetRoles' という名前のオブジェクトがすでに存在します。
-
[解決済み] System.Web.HttpException (0x80004005)。リクエストの最大長を超えました
-
[解決済み] MVC 3 - 辞書に渡されたモデル項目の型は 'System.Collections.Generic.List`1 です。
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] MVCにおけるViewModelとは?
-
[解決済み] ASP.NET MVCでHTML-5のdata-*属性でダッシュを使用する方法
-
[解決済み】サービスは常にDTOを返すべきですか、それともドメインモデルも返すことができますか?
-
[解決済み】ASP.NET MVCで属性を使用して特定のアクションのキャッシュを防止する
-
[解決済み】ASP.NET MVC 3 Razor - EditorForにクラスを追加する。
-
[解決済み] ASP.NET MVCのモデルでUrlHelperを呼び出す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み】1つのビューに複数のモデルを表示する
-
[解決済み】Html.ActionLinkが"?Length=4 "とレンダリングされるのはなぜか?
-
[解決済み】ViewModelのベストプラクティス
-
[解決済み] asp.net mvc: なぜ Html.CheckBox は追加の隠された入力を生成するのですか?
-
[解決済み] .NETで1ファイル1クラスルール?[クローズド]です。
-
[解決済み] ASP.Net MVCでRequest on Controllerをモック化する方法とは?
-
[解決済み] ASP.NET MVCのモデルでUrlHelperを呼び出す
-
[解決済み] Visual Studio 2012 または Visual Studio 2013 で古い MVC プロジェクトを開くにはどうすればよいですか?