J'ai un contrôleur mvc auquel une classe auxiliaire est injectée. Je voudrais convertir d'un viewmodel à un dto en utilisant automapper. la plupart des propriétés sont des mappages simples, mais l'une implique l'appel de la classe d'assistance avec un paramètre du viewmodel. Idéalement, je voudrais faire quelque chose comme ceci:Automapper et accès aux variables membres
Mapper.CreateMap<TheViewModel, TheDto>()
.ForMember(dest => dest.Url, o => o.MapFrom(src => _urlHelper.GenerateUrlFromUsername(src.Username)));
... mais je ne peux pas parce que je ne peux pas accéder à un champ non statique.
Quelle est la meilleure approche?
EDIT:
OK, donc j'ai un résolveur personnalisé, mais comment puis-je brancher ce à mon conteneur IoC?
public class CustomResolver : ValueResolver<TheViewModel, string>
{
private readonly IUrlHelper _urlHelper;
public CustomResolver(IUrlHelper urlHelper)
{
_urlHelper = urlHelper;
}
protected override string ResolveCore(TheViewModel source)
{
return _urlHelper.GenerateUrlFromUsername(source.Username);
}
}
Merci. J'ai maintenant mon résolveur personnalisé (voir ci-dessus), mais comment connecter ceci à mon conteneur IoC? –
Vous pouvez utiliser la méthode de configuration "ConstructServicesUsing" pour ce faire. Il indique à AutoMapper d'utiliser cette fonction pour créer tous les formateurs, résolveurs et convertisseurs de type. –