6

リポジトリ、ドメインモデル、DTOを配置するためのクラスライブラリを作成します。たとえば、ユーザーがClienteRepository.GetById(1)を呼び出すと、クライアントドメインモデルを取得し、ClientDTOに変換して、これを返す必要があります。例:

public class ClientRepository{
     public ClientDTO GetById(int id){
          var clientDto = Mapper.Map<Client, ClientDTO>(_db.Client.Find(id));

          return clientDto;
     }

}

問題は、マップを作成しなかったためにMapper.Mapが機能しないことです(Mapper.CreateMap<Client, ClientDTO>())。

私の質問:global.asaxを作成する必要がない場合、クラスライブラリでこれを行うにはどうすればよいですか?

4

2 に答える 2

8

https://github.com/davidebbo/WebActivatorを使用して問題を解決しました。新しいクラスを作成し、次のコードを配置するだけです。

[assembly: WebActivator.PostApplicationStartMethod(typeof (MapsInit), "Activate")]
namespace Database
{
    public static class MapsInit
    {
        public static void Activate()
        {
            Mapper.CreateMap<ClienteDto, Cliente>();
            Mapper.CreateMap<Cliente, ClienteDto>();
        }
    }
}
于 2012-12-09T18:40:25.433 に答える
8

AutomapperにGlobal.asaxは必要ありません。これは、Webプロジェクトの初期化のマッピングを行うためのより良い方法です。

initコードを静的コンストラクターに入れるだけです

 static MyStaticCtor()
    {
        //samples
        //Mapper.CreateMap<AccountViewModel, Account>();
        //Mapper.CreateMap<AccountSettingViewModel, AccountSetting>()

        Mapper.AssertConfigurationIsValid();
    }

または、リポジトリのコンストラクタでこれを行うこともできます。

于 2012-09-26T14:08:21.843 に答える