Nuestro team de expertos despúes de varios días de investigación y de recopilar de datos, hallamos la respuesta, deseamos que resulte de utilidad para tu plan.
Solución:
¡Me lo imaginé! Aquí están los detalles:
-
Agregue el paquete AutoMapper principal a su solución a través de NuGet.
-
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 agregue el siguiente código.) Usaré unUser
yUserDto
objeto como ejemplo.public class MappingProfile : Profile public MappingProfile() // Add as many of these lines as you need to map your objects CreateMap
(); CreateMap (); -
Luego agregue AutoMapperConfiguration en el
Startup.cs
Como se muestra abajo: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();
-
Para invocar el objeto mapeado en el código, haga algo como lo siguiente:
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
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 (user); // .... Do whatever you want after that!
¡Espero que esto ayude a alguien a comenzar de nuevo con ASP.NET Core! Agradezco cualquier comentario o crítica ya que todavía soy nuevo en el mundo .NET.
Paso para usar AutoMapper con ASP.NET Core.
Paso 1. Instalar AutoMapper.Extensions.Microsoft.DependencyInjection desde el paquete NuGet.
Paso 2. Cree una carpeta en la solución para mantener las asignaciones con el nombre “Asignaciones”.
Paso 3. Después de agregar la carpeta de mapeo, hemos agregado una clase con el nombre “MappingProfile“Este nombre puede ser algo único y bueno de entender.
En esta clase, vamos a mantener todas las asignaciones.
Paso 4. Inicialización de Mapper en el inicio “ConfigureServices”
En la clase de inicio, necesitamos inicializar el perfil que hemos creado y también registrar el servicio AutoMapper.
Mapper.Initialize(cfg => cfg.AddProfile());
services.AddAutoMapper();
Fragmento de código para mostrar el método ConfigureServices donde necesitamos inicializar y registrar AutoMapper.
public class Startup
public Startup(IConfiguration configuration)
Configuration = configuration;
public IConfiguration Configuration get;
public void ConfigureServices(IServiceCollection services)
services.Configure(options =>
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
);
// Start Registering and Initializing AutoMapper
Mapper.Initialize(cfg => cfg.AddProfile());
services.AddAutoMapper();
// End Registering and Initializing AutoMapper
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Paso 5. Obtenga resultados.
Para obtener el resultado mapeado, debemos llamar a AutoMapper.Mapper.Map y pasar el destino y la fuente adecuados.
AutoMapper.Mapper.Map(source);
Fragmento de código
[HttpPost]
public void Post([FromBody] SchemeMasterViewModel schemeMaster)
if (ModelState.IsValid)
var mappedresult = AutoMapper.Mapper.Map(schemeMaster);
Quiero extender las respuestas de @ theutz, a saber, esta línea:
// services.AddAutoMapper(typeof(Startup)); // <-- newer automapper version uses this signature.
Hay un errorprobablemente) 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 de perfil de AutoMapper existen fuera del ensamblaje donde se encuentra su clase de inicio, probablemente no se registrarán si su inyección de AutoMapper se ve así:
services.AddAutoMapper();
a menos que especifique explícitamente qué ensamblados buscar perfiles de AutoMapper.
Se puede hacer así en su Startup.ConfigureServices:
services.AddAutoMapper( or );
dónde "Ensambles" y "type_in_assemblies" apunte al ensamblado donde se especifican las clases de perfil en su aplicación. P.ej:
services.AddAutoMapper(typeof(ProfileInOtherAssembly), typeof(ProfileInYetAnotherAssembly));
I suponer (y pongo énfasis en esta palabra) que debido a la siguiente implementación de sobrecarga sin parámetros (código fuente de GitHub):
public static IServiceCollection AddAutoMapper(this IServiceCollection services)
return services.AddAutoMapper(null, AppDomain.CurrentDomain.GetAssemblies());
confiamos en que CLR ya tiene un ensamblaje JITed que contiene perfiles de AutoMapper que pueden ser o no true ya que solo se alteran cuando es necesario (más detalles en esta pregunta de StackOverflow).
Si guardas algún reparo o capacidad de limar nuestro post eres capaz de añadir una interpretación y con placer lo ojearemos.