1. ホーム
  2. c#

[解決済み] ASP.NET CoreでAutomapperを設定する方法

2022-03-17 05:08:10

質問

私は.NETの比較的新しいユーザーですが、quot;古い方法"を学ぶ代わりに、.NET Coreに取り組むことにしました。に関する詳細な記事を見つけました。 AutoMapper for .NET Coreの設定はこちらです。 しかし、初心者にとってもっと簡単なチュートリアルはないのでしょうか?

どのように解決するのですか?

わかったぞ! 以下はその詳細です。

  1. メインとなるAutoMapperパッケージは、以下の方法でソリューションに追加します。 NuGet .

  2. AutoMapper Dependency Injection パッケージをソリューションに追加するには、次のようにします。 NuGet .

  3. マッピングプロファイルのクラスを新規に作成します。(メインのソリューションディレクトリに MappingProfile.cs を作成し、以下のコードを追加してください) ここでは UserUserDto オブジェクトを例にしています。

     public class MappingProfile : Profile {
         public MappingProfile() {
             // Add as many of these lines as you need to map your objects
             CreateMap<User, UserDto>();
             CreateMap<UserDto, User>();
         }
     }
    
    
  4. 次に、AutoMapperConfigurationを Startup.cs を以下のように設定します。

     public void ConfigureServices(IServiceCollection services) {
         // .... Ignore code before this
    
        // Auto Mapper Configurations
         var mapperConfig = new MapperConfiguration(mc =>
         {
             mc.AddProfile(new MappingProfile());
         });
    
         IMapper mapper = mapperConfig.CreateMapper();
         services.AddSingleton(mapper);
    
         services.AddMvc();
    
     }
    
    
  5. マップされたオブジェクトをコードで呼び出すには、次のようにします。

     public class UserController : Controller {
    
         // Create a field to store the mapper object
         private readonly IMapper _mapper;
    
         // Assign the object in the constructor for dependency injection
         public UserController(IMapper mapper) {
             _mapper = mapper;
         }
    
         public async Task<IActionResult> Edit(string id) {
    
             // Instantiate source object
             // (Get it from the database or whatever your code calls for)
             var user = await _context.Users
                 .SingleOrDefaultAsync(u => u.Id == id);
    
             // Instantiate the mapped data transfer object
             // using the mapper you stored in the private field.
             // The type of the source object is the first type argument
             // and the type of the destination is the second.
             // Pass the source object you just instantiated above
             // as the argument to the _mapper.Map<>() method.
             var model = _mapper.Map<UserDto>(user);
    
             // .... Do whatever you want after that!
         }
     }