Sou relativamente novo no .NET e decidi abordar o .NET Core em vez de aprender as "maneiras antigas". Encontrei um artigo detalhado sobre a configuração do AutoMapper para .NET Core aqui , mas há uma explicação mais simples para um novato?
c#
asp.net-core
automapper
theutz
fonte
fonte
Respostas:
Eu descobri! Aqui estão os detalhes:
Adicione o pacote de injeção de dependência do AutoMapper à sua solução via NuGet .
Crie uma nova classe para um perfil de mapeamento. (Fiz uma classe no diretório principal da solução chamada
MappingProfile.cs
e adicionei o código a seguir.) Usarei umUser
eUserDto
objeto como exemplo.Em seguida, adicione o AutoMapperConfiguration no
Startup.cs
como mostrado abaixo:Para invocar o objeto mapeado no código, faça algo como o seguinte:
Espero que isso ajude alguém a começar de novo com o ASP.NET Core! Congratulo-me com quaisquer comentários ou críticas, pois ainda sou novo no mundo .NET!
fonte
Profile
classes estão localizadasEtapa para usar o AutoMapper com o ASP.NET Core.
Etapa 1. Instalando o AutoMapper.Extensions.Microsoft.DependencyInjection a partir do NuGet Package.
Etapa 2. Crie uma pasta na solução para manter os mapeamentos com o nome "Mapeamentos".
Etapa 3. Após adicionar a pasta Mapping, adicionamos uma classe com o nome " MappingProfile ", que esse nome pode ser único e bom de entender.
Nesta classe, vamos manter todos os mapeamentos.
Etapa 4. Inicializando o Mapper na Inicialização "ConfigureServices"
Na classe de inicialização, precisamos inicializar o perfil que criamos e também registrar o serviço AutoMapper.
Fragmento de código para mostrar o método ConfigureServices onde precisamos inicializar e registrar o AutoMapper.
Etapa 5. Obter saída.
Para obter o resultado mapeado, precisamos chamar AutoMapper.Mapper.Map e passar o destino e a origem adequados.
Fragmento de código
fonte
'Mapper' does not contain a definition for 'initialize'
. Estou usando aAutoMapper.Extensions.Microsoft.DependencyInjection
versão 7.0.0Quero estender as respostas de @ theutz - ou seja, esta linha:
Há um erro ( provavelmente ) no AutoMapper.Extensions.Microsoft.DependencyInjection versão 3.2.0. (Estou usando o .NET Core 2.0)
Isso é abordado nesta edição do GitHub. Se suas classes que herdam a classe Profile do AutoMapper existirem fora da montagem onde você está na classe Startup, elas provavelmente não serão registradas se a injeção do AutoMapper estiver assim:
a menos que você especifique explicitamente quais assemblies procurar pelos perfis do AutoMapper.
Isso pode ser feito assim em sua Startup.ConfigureServices:
onde "assemblies" e "type_in_assemblies" apontam para o assembly em que as classes Profile em seu aplicativo são especificadas. Por exemplo:
Eu suponho que (e eu coloquei ênfase nessa palavra) que, devido a seguinte implementação de sobrecarga sem parâmetros (código-fonte do GitHub ):
contamos com o CLR que já montou o JIT, contendo perfis do AutoMapper, que podem ou não ser verdadeiros, pois são acionados apenas quando necessário (mais detalhes nesta pergunta do StackOverflow).
fonte
A resposta do theutz aqui é muito boa, só quero acrescentar:
Se você deixar o seu perfil de mapeamento herdar em
MapperConfigurationExpression
vez deProfile
, poderá simplesmente adicionar um teste para verificar sua configuração de mapeamento, o que é sempre útil:fonte
Resolvi-o desta maneira (semelhante ao acima, mas sinto que é uma solução mais limpa) para o .NET Core 2.2 / Automapper 8.1.1 com Extensions.DI 6.1.1.
Crie a classe MappingProfile.cs e preencha o construtor com o Maps (pretendo usar uma única classe para armazenar todos os meus mapeamentos)
Em Startup.cs, adicione abaixo para adicionar ao DI (o argumento arg é para a classe que contém suas configurações de mapeamento, no meu caso, é a classe MappingProfile).
No Controller, use-o como faria com qualquer outro objeto DI
fonte
MappingProfiles
-senew Type[]{}
como mostrado nesta resposta .No meu Startup.cs (Core 2.2, Automapper 8.1.1)
No meu projeto de acesso a dados
Na minha definição de modelo
fonte
services.AddAutoMapper( typeof(DAL.MapperProfile) );
não usaservices.AddAutoMapper(new Type[] { typeof(DAL.MapperProfile) });
?Eu gosto de muitas respostas, principalmente a de @saineshwar. Estou usando o .net Core 3.0 com o AutoMapper 9.0, então acho que é hora de atualizar sua resposta.
O que funcionou para mim foi no Startup.ConfigureServices (...) registrar o serviço da seguinte maneira:
Eu acho que o resto da resposta @saineshwar continua perfeito. Mas se alguém estiver interessado, meu código de controlador é:
E minha classe de mapeamento:
----- EDIT -----
Depois de ler os documentos vinculados nos comentários de Lucian Bargaoanu, acho melhor mudar um pouco essa resposta.
O parâmetro
services.AddAutoMapper()
(que teve a resposta @saineshwar) não funciona mais (pelo menos para mim). Mas se você usar o assembly NuGet AutoMapper.Extensions.Microsoft.DependencyInjection, a estrutura poderá inspecionar todas as classes que estendem o AutoMapper.Profile (como o meu, MappingProfile).Portanto, no meu caso, onde a classe pertence ao mesmo assembly em execução, o registro do serviço pode ser reduzido para
services.AddAutoMapper(System.Reflection.Assembly.GetExecutingAssembly());
(Uma abordagem mais elegante pode ser uma extensão sem parâmetros com essa codificação).
Obrigado, Lucian!
fonte
Estou usando o AutoMapper 6.1.1 e o asp.net Core 1.1.2.
Antes de tudo, defina as classes Profile herdadas pela Profile Class of Automapper. Criei a interface IProfile vazia, o objetivo é apenas encontrar as classes desse tipo.
Agora crie uma classe separada, por exemplo, Mapeamentos
Agora no MVC Core web Project no arquivo Startup.cs, no construtor, chame a classe Mapping que inicializará todos os mapeamentos no momento do carregamento do aplicativo.
fonte
Para o ASP.NET Core (testado usando 2.0+ e 3.0), se você preferir ler a documentação de origem: https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection/blob/master/README.md
Caso contrário, siga estes 4 passos:
Instale o AutoMapper.Extensions.Microsoft.DependancyInjection a partir do nuget.
Basta adicionar algumas classes de perfil.
Em seguida, adicione abaixo à sua classe startup.cs.
services.AddAutoMapper(OneOfYourProfileClassNamesHere)
Em seguida, basta injetar o IMapper em seus controladores ou onde você precisar:
E se você quiser usar o ProjectTo agora, basta:
fonte
Para o AutoMapper 9.0.0:
MapperProfile:
Na sua inicialização:
No controlador ou serviço: injetar mapeador:
Uso:
fonte
Nas versões mais recentes do núcleo do asp.net, você deve usar a seguinte inicialização:
fonte
Asp.Net Core 2.2 com AutoMapper.Extensions.Microsoft.DependencyInjection.
Em Startup.cs
fonte
Para adicionar o que Arve Systad mencionou para teste. Se por algum motivo você for como eu e quiser manter a estrutura de herança fornecida na solução theutz, poderá configurar a Configuração do Mapper da seguinte maneira:
Eu fiz isso no NUnit.
fonte
services.AddAutoMapper (); não funcionou para mim. (Estou usando o Asp.Net Core 2.0)
Depois de configurar como abaixo
inicialize o mapeador IMapper mapper = config.CreateMapper ();
e adicione o objeto mapeador aos serviços como serviços singleton.AddSingleton (mapper);
Desta forma, eu sou capaz de adicionar um DI ao controlador
e eu usei como abaixo nos meus métodos de ação
fonte
sobre a resposta theutz, não há necessidade de especificar o parâmetro do mapeador IMapper no construtor de controladores.
você pode usar o mapeador, pois é um membro estático em qualquer lugar do código.
fonte
IMapper
você pode zombar disso e, por exemplo, fazer com que ele retorne nulo se for irrelevante para o teste fornecido.