0

従来の知恵では、親から子の名前空間を呼び出してはいけません。

AutoMapperのようなものを使用して、コンテンツ モデルを ASP.NET MVC 3 サイトのビューモデルに変換するとします。

私のディレクトリ構造は次のようになります。

- Stuff.Content
    -Foo.cs
- Stuff.Content.Public
    -Controllers
        -FooController.cs
    -Models
        -FooViewModel.cs
    -Views
        -Foo
            -Index.cshtml
 - AutoMapperConfig.cs
 - Global.asax

この場合のAutoMapperConfig.csは、マッピングを設定するための静的メソッドを持つ単純な静的クラスであり、次のようになります。

public static class AutoMapperConfig
{
    public static void Configure()
    {
        Mapper.CreateMap<Foo, FooViewModel>();
    }
}

パブリック プロジェクトのルートにAutoMapperConfigがあることがわかりますが、実際には子名前空間 ( Stuff.Content.Public.Models ) を呼び出しています。

その子名前空間への呼び出しは受け入れられますか? AutoMapperConfigは、viewmodel とともにModels名前空間に存在する必要がありますか?

Controllers 名前空間のコントローラーが兄弟モデル名前空間を呼び出すのは正常と見なされるため、この領域ではあいまいになるようです。

あなたの考えを楽しみにしています。ありがとう。

4

1 に答える 1

1

現在のデザインに問題はないと思います。個人的には、マッピング構成をMappingsサブフォルダー フォルダーに入れます。

- Stuff.Content
    -Foo.cs
- Stuff.Content.Public
    -Controllers
        -FooController.cs
    -Models
        -FooViewModel.cs
    -Views
        -Foo
            -Index.cshtml
    -Mappings
        -AutoMapperConfig.cs
 - Global.asax

また、ドメイン モデルごとに個別のマッピング ファイルを定義する傾向があります。

-Mappings
   -MappingRegistry.cs
   -FooProfile.cs
   -BarProfile.cs
   -...

そして、ここに例がありFooProfile.csます:

public class FooProfile: Profile
{
    protected override void Configure()
    {
        CreateMap<Foo, FooViewModel>();
    }
}

MappingRegistry.cs:

public static class MappingRegistry
{
    public static void Configure()
    {
        Mapper.Initialize(
            x => typeof(MappingRegistry)
                .Assembly
                .GetTypes()
                .Where(type => !type.IsAbstract && typeof(Profile).IsAssignableFrom(type))
                .ToList()
                .ForEach(type => x.AddProfile((Profile)Activator.CreateInstance(type)))
        );
    }
}
于 2012-05-04T06:18:48.787 に答える