Search code examples
asp.net-coreautomapperautomapper-5

Setting up Automapper 5.1


I am having trouble following the wiki in this instance. I wanted to use Automapper 5.2. I cannot find a simple end for end example that shows a solid configuration with context. By context I mean where do you put the config files and whats the difference between static and instance api?

I checked out the DNRTV download but it deals with the 1.0 version.

How do you set this package up? I have a model called Client as below.

    public class Client : IEntityBase
{
    public Client()
    {
        Jobs = new List<Job>();
    }
    public int Id { get; set; }
    public int ClientNo { get; set; }
    public bool Company { get; set; }
    public string CompanyName { get; set; }
    public string ClientFirstName { get; set; }
    public DateTime DeActivated { get; set; }
    public bool Activity { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateUpdated { get; set; }

    public int? StateId { get; set; }
    public State State { get; set; }

    public int CreatorId { get; set; }
    public User Creator { get; set; }

    public ICollection<Job> Jobs { get; set; }
}

and a ClientViewModel as so:

    public class ClientViewModel
{
    public int Id { get; set; }
    public int ClientNo { get; set; }
    public bool Company { get; set; }
    public string CompanyName { get; set; }
    public string ClientFirstName { get; set; }
    public DateTime DeActivated { get; set; }
    public bool Activity { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateUpdated { get; set; }
    public int? StateId { get; set; }
    public int CreatorId { get; set; }
    public int[] Jobs { get; set; }
}

I am unsure how to set AutoMapper up with regard to configuration. That is, they talk about a global.asax file and I am using aspnet core.. there is no Global.asax file..

What do you put in the Startup.cs file if anything.

Given these two files above what do I need to do to use Automapper with them?

Regards


Solution

  • Here is the steps to configure the automapper in asp.net core mvc.

    1. Create the mapping profile class which extends from Profile

     public class ClientMappingProfile : Profile
     {
         public ClientMappingProfile ()
         {
             CreateMap<Client, ClientViewModel>().ReverseMap();
         }
     }
    

    2. Create the AutoMapper Configuration Class and add your mapping profile class here.

    public class AutoMapperConfiguration
    {
       public MapperConfiguration Configure()
       {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile<ClientMappingProfile>();
            });
            return config;
        }
    }
    

    3. Create extension method so, we can add this to Startup.cs ConfigureServices method

    public static class CustomMvcServiceCollectionExtensions
    {
       public static void AddAutoMapper(this IServiceCollection services)
       {
           if (services == null)
           {
               throw new ArgumentNullException(nameof(services));
           }
           var config = new AutoMapperConfiguration().Configure();
           services.AddSingleton<IMapper>(sp => config.CreateMapper());
        }
    } 
    

    4. Call the extension method in Startup.cs ConfigureServices method

     public void ConfigureServices(IServiceCollection services)
     {
         services.AddDbContext<DBContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
         services.AddMvc();
    
         services.AddAutoMapper();
    }