1

RegisterMaps現在、から呼び出されるメソッドがありApplication_Startます。

public static class AutoMapperRegistrar
{
    public static void RegisterMaps()
    {
        Mapper.CreateMap<Employee, EmployeeEditModel>();
        Mapper.CreateMap<Employee, EmployeeCreateModel>();
    }
}

またMappedViewModel、ほとんどのビュー モデルの派生元となる基本クラスもあります。

public class MappedViewModel<TEntity>: ViewModel
{
    public virtual void MapFromEntity(TEntity entity)
    {
        Mapper.Map(entity, this, typeof(TEntity), GetType());
    }
}

マッピングの長いリストを維持することはRegisterMaps、私にとって少し摩擦を引き起こします。の静的コンストラクターにマップの作成を委譲することを考えていますMappedViewModel。これを安全に行うことはできますか?つまり、パフォーマンスに悪影響を及ぼしますか?または、OO を増やしてマップされた各クラスに独自のマップを作成させない他の理由はありますか?

4

1 に答える 1

1

ある型を別の型にマップするものは、2 つの型コンストラクターのどちらに属しますか?

現在の方法と同様のアプローチがありますが、各マッピングを独自の AutoMapper プロファイルに配置し、リフレクションを使用してそれらをすべて見つけて初期化します。

通常、私はさらに一歩進んで、AutoMapper への静的参照を使用しません。最終的にはこのようになります。

Bind<ITypeMapFactory>().To<TypeMapFactory>();
Bind<ConfigurationStore>().ToSelf().InSingletonScope();
Bind<IConfiguration>().ToMethod(c => c.Kernel.Get<ConfigurationStore>());
Bind<IConfigurationProvider>().ToMethod(c => c.Kernel.Get<ConfigurationStore>());
Bind<IMappingEngine>().To<MappingEngine>();

//Load all the mapper profiles
var configurationStore = Kernel.Get<ConfigurationStore>();
foreach (var profile in typeof(AutoMapperNinjectModule).Assembly.GetAll<Profile>())
{
    configurationStore.AddProfile(Kernel.Get(profile) as Profile);
}



public class AccountViewModelProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<Account, AccountListItemViewModel>()
            .ForMember(d => d.AccountType, opt => opt.MapFrom(s => s.GetType().Name));
    }
}       
于 2012-10-07T08:31:33.547 に答える