netcore microsoft injection extensions dependencyinjection dependency custom c# dependency-injection inversion-of-control castle-windsor automapper

c# - microsoft - Automapper Custom Resolver-Inyectar repositorio en el constructor



automapper profile (2)

Intento crear una resolución personalizada para Automapper que necesite acceder a uno de mis repositorios de datos para recuperar la cuenta de usuario registrada.

Aquí está mi código hasta ahora...

public class FollowingResolver : ValueResolver<Audio, bool> { readonly IIdentityTasks identityTasks; public FollowingResolver(IIdentityTasks identitTasks) { this.identityTasks = identitTasks; } protected override bool ResolveCore(Audio source) { var user = identityTasks.GetCurrentIdentity(); if (user != null) return user.IsFollowingUser(source.DJAccount); return false; } }

Sin embargo, estoy obteniendo este error:

FollowingResolver'' does not have a default constructor

He intentado agregar un contrstructor predeterminado pero mi repositorio nunca se inicializa entonces.

Este es el código de inicialización de mi autoampper:

public static void Configure(IWindsorContainer container) { Mapper.Reset(); Mapper.Initialize(x => { x.AddProfile<AccountProfile>(); x.AddProfile<AudioProfile>(); x.ConstructServicesUsing(container.Resolve); }); Mapper.AssertConfigurationIsValid(); }

¿Me estoy perdiendo algo, incluso es posible hacerlo así o me estoy perdiendo el barco aquí?


Encontré la solución desastrosamente después de ... me estaba olvidando de agregar mis resolvedores como un contenedor IoC.

Funciona muy bien ahora!


Estaba obteniendo el mismo error al usar Castle Windsor al intentar inyectar un servicio.

Tuve que agregar:

Mapper.Initialize(map => { map.ConstructServicesUsing(_container.Resolve); });

antes de Mapper.CreateMap llamadas Mapper.CreateMap .

Creado un ValueResolverInstaller como este:

public class ValueResolverInstaller : IWindsorInstaller { public void Install(IWindsorContainer container, IConfigurationStore store) { container.Register(Classes.FromThisAssembly() .BasedOn<IValueResolver>() .LifestyleTransient()); } }

y el ValueResolver sí mismo:

public class DivergencesResolver : ValueResolver<MyClass, int> { private AssessmentService assessmentService; public DivergencesResolver(AssessmentService assessmentService) { this.assessmentService = assessmentService; } protected override int ResolveCore(MyClass c) { return assessmentService.GetAssessmentDivergences(c.AssessmentId).Count(); } }