Soy relativamente nuevo en .NET, y decidí abordar .NET Core en lugar de aprender las "viejas formas". Encontré un artículo detallado sobre cómo configurar AutoMapper para .NET Core aquí , pero ¿hay un tutorial más simple para un novato?
c#
asp.net-core
automapper
theutz
fuente
fuente
Respuestas:
¡Me lo imaginé! Aquí están los detalles:
Agregue el paquete de inyección de dependencia de AutoMapper a su solución a través de NuGet .
Cree una nueva clase para un perfil de mapeo. (Hice una clase en el directorio principal de la solución llamada
MappingProfile.cs
y agregué el siguiente código). Usaré un objetoUser
yUserDto
como ejemplo.Luego agregue la AutoMapperConfiguration en el
Startup.cs
que se muestra a continuación:Para invocar el objeto mapeado en código, haga algo como lo siguiente:
¡Espero que esto ayude a alguien que comienza de cero con ASP.NET Core! Agradezco cualquier comentario o crítica ya que todavía soy nuevo en el mundo .NET.
fuente
Profile
se ubican las clasesPaso para usar AutoMapper con ASP.NET Core.
Paso 1. Instalar AutoMapper.Extensions.Microsoft.DependencyInjection desde el paquete NuGet.
Paso 2. Cree una carpeta en solución para mantener las asignaciones con el nombre "Asignaciones".
Paso 3. Después de agregar la carpeta Mapping, hemos agregado una clase con el nombre " MappingProfile ". Este nombre puede ser único y bueno de entender.
En esta clase, vamos a mantener todas las asignaciones.
Paso 4. Inicializando Mapper en el inicio "ConfigureServices"
En Startup Class, necesitamos inicializar el perfil que hemos creado y también registrar el servicio AutoMapper.
Fragmento de código para mostrar el método ConfigureServices donde necesitamos inicializar y registrar AutoMapper.
Paso 5. Obtener salida.
Para obtener el resultado del mapeo, debemos llamar a AutoMapper.Mapper.Map y pasar el Destino y el Origen adecuados.
Fragmento de código
fuente
'Mapper' does not contain a definition for 'initialize'
. Estoy usando laAutoMapper.Extensions.Microsoft.DependencyInjection
versión 7.0.0Quiero extender las respuestas de @ theutz, es decir, esta línea:
Hay un error ( probablemente ) en AutoMapper.Extensions.Microsoft.DependencyInjection versión 3.2.0. (Estoy usando .NET Core 2.0)
Esto se aborda en este problema de GitHub. Si sus clases que heredan la clase Perfil de AutoMapper existen fuera del ensamblaje donde está su clase de Inicio, probablemente no se registrarán si su inyección de AutoMapper se ve así:
a menos que especifique explícitamente qué ensamblajes buscar en los perfiles de AutoMapper.
Se puede hacer así en su Startup.ConfigureServices:
donde "ensamblados" y "type_in_assemblies" apuntan al ensamblado donde se especifican las clases de perfil en su aplicación. P.ej:
Yo supongo (y pongo énfasis en esta palabra) que, debido a raíz de la aplicación de la sobrecarga sin parámetros (código fuente desde GitHub ):
confiamos en que CLR ya ha ensamblado JIT que contiene perfiles de AutoMapper que pueden ser o no ciertos, ya que solo se modifican cuando es necesario (más detalles en esta pregunta de StackOverflow).
fuente
La respuesta de theutz aquí es muy buena, solo quiero agregar esto:
Si deja que su perfil de mapeo herede en
MapperConfigurationExpression
lugar deProfile
, simplemente puede agregar una prueba para verificar su configuración de mapeo, que siempre es útil:fuente
Lo resolví de esta manera (similar a lo anterior pero siento que es una solución más limpia) para .NET Core 2.2 / Automapper 8.1.1 w / Extensions.DI 6.1.1.
Crear la clase MappingProfile.cs y completar el constructor con Maps (planeo usar una sola clase para contener todas mis asignaciones)
En Startup.cs, agregue a continuación para agregar a DI (el argumento de ensamblaje es para la clase que contiene sus configuraciones de mapeo, en mi caso, es la clase MappingProfile).
En Controller, úselo como lo haría con cualquier otro objeto DI
fuente
MappingProfiles
con lonew Type[]{}
que se muestra en esta respuesta .En mi Startup.cs (Core 2.2, Automapper 8.1.1)
En mi proyecto de acceso a datos
En mi definición de modelo
fuente
services.AddAutoMapper( typeof(DAL.MapperProfile) );
lugar deservices.AddAutoMapper(new Type[] { typeof(DAL.MapperProfile) });
?Me gustan muchas respuestas, particularmente la de @saineshwar. Estoy usando .net Core 3.0 con AutoMapper 9.0, así que siento que es hora de actualizar su respuesta.
Lo que funcionó para mí fue en Startup.ConfigureServices (...) registre el servicio de esta manera:
Creo que el resto de la respuesta de @saineshwar se mantiene perfecta. Pero si alguien está interesado, mi código de controlador es:
Y mi clase de mapeo:
----- EDITAR -----
Después de leer los documentos vinculados en los comentarios de Lucian Bargaoanu, creo que es mejor cambiar un poco esta respuesta.
El sin parámetros
services.AddAutoMapper()
(que tenía la respuesta @saineshwar) ya no funciona (al menos para mí). Pero si usa el ensamblado NuGet AutoMapper.Extensions.Microsoft.DependencyInjection, el marco puede inspeccionar todas las clases que extienden AutoMapper.Profile (como el mío, MappingProfile).Entonces, en mi caso, donde la clase pertenece al mismo ensamblaje en ejecución, el registro del servicio se puede acortar a
services.AddAutoMapper(System.Reflection.Assembly.GetExecutingAssembly());
(Un enfoque más elegante podría ser una extensión sin parámetros con esta codificación).
Gracias Lucian!
fuente
Estoy usando AutoMapper 6.1.1 y asp.net Core 1.1.2.
En primer lugar, defina las clases de perfil heredadas por la clase de perfil de Automapper. Creé la interfaz IProfile que está vacía, el propósito es solo encontrar las clases de este tipo.
Ahora cree una clase separada, por ejemplo, asignaciones
Ahora en MVC Core web Project en el archivo Startup.cs, en el constructor, llame a la clase Mapping que inicializará todas las asignaciones en el momento de la carga de la aplicación.
fuente
Para ASP.NET Core (probado con 2.0+ y 3.0), si prefiere leer la documentación de origen: https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection/blob/master/README.md
De lo contrario, seguir estos 4 pasos funciona:
Instale AutoMapper.Extensions.Microsoft.DependancyInjection desde nuget.
Simplemente agregue algunas clases de perfil.
Luego agregue a continuación a su clase startup.cs.
services.AddAutoMapper(OneOfYourProfileClassNamesHere)
Luego, simplemente inyecte IMapper en sus controladores o donde lo necesite:
Y si quieres usar ProjectTo es ahora simplemente:
fuente
Para AutoMapper 9.0.0:
MapperProfile:
En tu inicio:
En Controlador o servicio: Inyectar mapeador:
Uso:
fuente
En las últimas versiones de asp.net core, debe usar la siguiente inicialización:
fuente
Asp.Net Core 2.2 con AutoMapper.Extensions.Microsoft.DependencyInjection.
En Startup.cs
fuente
Para agregar a lo que Arve Systad mencionó para las pruebas. Si por alguna razón eres como yo y quieres mantener la estructura de herencia proporcionada en la solución deutz, puedes configurar MapperConfiguration de esta manera:
Hice esto en NUnit.
fuente
servicios.AddAutoMapper (); No funcionó para mí. (Estoy usando Asp.Net Core 2.0)
Después de configurar como a continuación
inicializar el mapeador IMapper mapper = config.CreateMapper ();
y agregue el objeto del mapeador a los servicios como servicios singleton. AddSingleton (mapeador);
de esta manera puedo agregar una DI al controlador
y he usado lo siguiente en mis métodos de acción
fuente
acerca de la respuesta thez, no hay necesidad de especificar el parámetro de mapeador IMapper en el constructor de controladores.
puede usar el asignador, ya que es un miembro estático en cualquier lugar del código.
fuente
IMapper
puede burlarse de eso y, por ejemplo, simplemente hacer que devuelva nulo si es irrelevante para la prueba dada.