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();
}
}