2 votes

Configurer la classe de profil d'Automapper avec le constructeur de paramètre et le Ninject

J'utilise Automapper (v5.1.1.0) et Ninject (v3.2.0.0). Ma classe de profil est :

public class ApplicationUserResponseProfile : Profile
{
    public ApplicationUserResponseProfile(HttpRequestMessage httpRequestMessage) 
    {
        UrlHelper urlHelper = new UrlHelper(httpRequestMessage);
        CreateMap<ApplicationUser, ApplicationUserResponseModel>()
            .ForMember(dest => dest.Url, opt => opt.MapFrom(src => urlHelper.Link("GetUserById", new { id = src.Id })));
    }

    public ApplicationUserResponseModel Create(ApplicationUser applicationUser)
    {
        return Mapper.Map<ApplicationUserResponseModel>(applicationUser);
    }
}

Et AutoMapperWebConfiguration l'est :

Mapper.Initialize(cfg =>
        {
            cfg.AddProfile<ApplicationUserResponseProfile>(); // unable to configure
        });

J'ai également essayé de le lier au noyau Ninject :

var config = new MapperConfiguration(
            c =>
            {
                c.AddProfile(typeof(ApplicationUserResponseProfile));
            });
var mapper = config.CreateMapper();
kernel.Bind<IMapper>().ToConstant(mapper);

Et d'une manière différente :

Mapper.Initialize(cfg =>
        {
            cfg.ConstructServicesUsing((type) => kernel.Get(type));
            cfg.AddProfile(typeof(ApplicationUserResponseProfile));
        });

Mais j'ai eu une erreur dans les deux cas -

Aucun constructeur sans paramètre défini pour cet objet

Aidez-moi, s'il vous plaît. Je ne parviens pas à configurer AutoMapper classe de profil (qui a un paramètre) avec Ninject . Existe-t-il un autre moyen de résoudre ce problème ?

1voto

J'ai résolu ce problème de différentes manières. J'ai migré automapper de statique au lieu de Profile approche.

public class ApplicationUserResponseFactory
{
    private MapperConfiguration _mapperConfiguration;
    public ApplicationUserResponseFactory(HttpRequestMessage httpRequestMessage) 
    {
        UrlHelper urlHelper = new UrlHelper(httpRequestMessage);
        _mapperConfiguration = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<ApplicationUser, ApplicationUserResponseModel>()
                .ForMember(dest => dest.Url, opt => opt.MapFrom(src => UrlHelper.Link("GetUserById", new { id = src.Id })));
        });

    }

    public ApplicationUserResponseModel Create(ApplicationUser applicationUser)
    {
        return _mapperConfiguration.CreateMapper().Map<ApplicationUserResponseModel>(applicationUser);
    }
}

J'ai trouvé la procédure de migration aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X