Automapper exception: “Missing type de carte de configuration ou de non prise en charge de la cartographie.”
Je suis en train d'utiliser Ninject dans un ASP.NET MVC 5 application qui utilise AutoMapper pour la cartographie de la Modèle à la Vue du Modèle, et vice-versa.
Malheureusement je reçois un message d'erreur indiquant que le type de la carte de configuration est manquant.
J'ai créé un résolveur de dépendance Ninject:
namespace MyNamespace.Infrastructure
{
public class NinjectDependencyResolver: IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver(IKernel kernelParam)
{
kernel = kernelParam;
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
private void AddBindings()
{
kernel.Bind<IMyBLL>().To<MyBLL>();
}
}
}
Je l'utilise pour créer un contrôleur:
namespace MyNamespace.Controllers
{
[Authorize]
public class HomeController : Controller
{
private IMyBLL _myBLL;
public HomeController(IMyBLL myBLLParam)
{
_myBLL = myBLLParam;
}
public PartialViewResult AddRecord()
{
return PartialView(new AddRecordViewModel());
}
[HttpPost]
public void AddRecord(AddRecordViewModel recordViewModel)
{
var record = Mapper.Map<Record>(recordViewModel);
_myBLL.AddRecord(record, User.Identity.Name);
}
}
}
Mondiale.asax:
namespace MyNamespace.WebApplication
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ApplicationUserManager.StartupAsync();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutoMapperWebConfiguration.Configure();
}
}
}
Cela appelle la AutoMapper configuration:
namespace MyNamespace.WebApplication.Infrastructure
{
public static class AutoMapperWebConfiguration
{
public static void Configure()
{
Mapper.Initialize(cfg => cfg.AddProfile(new RecordProfile()));
}
}
public class RecordProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<AddRecordViewModel, Record>().ReverseMap();
}
}
}
Lorsque je l'exécute j'obtiens le message d'erreur suivant:
Missing type map configuration or unsupported mapping.
Mapping types:
AddRecordViewModel -> Record
MyNamespace.WebApplication.ViewModels.Home.AddRecordViewModel -> MyNamespace.Model.Record
Destination path:
Record
Source value:
MyNamespace.WebApplication.ViewModels.Home.AddRecordViewModel
Me manque quelque chose.
Il a bien fonctionné avant, je les Ninject solveur de dépendances.
Maintenant, il ne semble pas trouver les mappages.
Edit:
Si j'ajoute la Cartographie Création directement à la méthode de contrôleur cela fonctionne:
[HttpPost]
public void AddRecord(AddRecordViewModel recordViewModel)
{
Mapper.CreateMap<AddRecordViewModel, Record>().ReverseMap();
var record = Mapper.Map<Record>(recordViewModel);
_myBLL.AddRecord(record, User.Identity.Name);
}
La cartographie elle-même et les modèles et les modèles de vue ne semble pas être le problème. Je suppose que le programme en quelque sorte de ne pas trouver les mappages.
Même si j'appelle l'Auto Mappeur Web de Configuration de la méthode du contrôleur cela fonctionne:
public void AddRecord(AddRecordViewModel recordViewModel)
{
Infrastructure.AutoMapperWebConfiguration.Configure();
var record = Mapper.Map<Record>(recordViewModel);
_myBLL.AddRecord(record, User.Identity.Name);
}
J'ai maintenant ajouté la deuxième cartographie. Malheureusement, je reçois toujours le même message d'erreur. Il semble que le programme ne trouve pas la correspondance.
Est-ce que votre
Record
avez des biens virtuels?J'ai exactement ce problème. J'ai d'autres cartes qui fonctionnent avec le Queryable extensions (projet), mais pour une autre carte créée continue à dire qu'il n'y est pas de cartographie, même si le MapperConfiguration clairement crée une carte pour les deux types. Tous dans le même projet en cours d'exécution sur la même machine. S'il vous plaît aider!
Wow, je ne savais pas que mapperConfig.CreateMapper() a été la création de la SEULE instance qui a les mappages! J'ai utiliser l'injection pour obtenir que mappeur, je ne peux pas tout simplement utiliser Automapper.Mappeur.De la carte...
OriginalL'auteur Alexander | 2015-01-23
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter la cartographie inverse aussi. Vous pouvez le faire de deux façons:
ou d'un seul coup comme suit:
Ce dernier est préférable si vous me demandez.
C'est étrange, puis. Pourriez-vous poster votre les deux classes, donc je peux voir les membres de la classe?
Je ne pense pas qu'il a quelque chose à faire avec les membres de la classe. Lorsque j'ajoute le Mappeur.CreateMap Méthode directement à la méthode de contrôleur, il fonctionne très bien (voir plus d'infos dans le poste principal). Seulement quand je supprimer ce et souhaitez utiliser la cartographie via le Global.asax il ne fonctionne pas.
Étrange. Tout semble être configuré correctement. L'erreur se produit lors de la cartographie du modèle de vue de l'Enregistrement du modèle. La cartographie de l'Enregistrement de modèle à la vue du modèle de travail lorsque votre AutoMapper configuration de la gauche dans
Application_Start
?OriginalL'auteur Joseph Woodward
Ne pas appeler à Mapper.CreateMap dans votre profil. Appel de base.CreateMap, et vous êtes fixés:
comment voulez-vous ajouter un mappage pour une liste à partir de la source à une stagnation de la classe?
ou tout simplement appeler CreateMap, la base est implicite puisque CreateMap est défini dans le Profil.
OriginalL'auteur Jimmy Bogard
Mapper.Initialize()
doit être utilisé strictement une fois par la solution.Si vous appelez
Initialize()
quelque part plus tard, il remplace tous les mappages.Inspectez votre code attentivement, guess, vous trouverez un appel de cette méthode dans un autre endroit.
P. S.: ce n'était pas le comportement initial de Automapper début, comme j'ai pu le voir dans des morceaux de code créé 3 et plus il y a des années sur GitHub.
OriginalL'auteur rock_walker
J'ai eu un problème similaire, j'ai oublié de s'inscrire dans le monde.asax
OriginalL'auteur Melqui Franco
Dans mon cas, le problème est que par défaut, certaines Automapper mappages ont été enregistrés avec le Cio.
La cartographie qui n'avaient pas été enregistré dans un autre lieu, la configuration du service de
Le projet était comment cette erreur a été d'un projet de test où le service de configuration n'a pas été exécutée. Lorsque débogué eu l'illusion que l'échec des mappages ont été enregistrés, comme l'on pouvait voir ceux de la Coi mappages.
Solution, assurez-vous que tous les mappages ont été enregistrés dans la solution d'essai.
OriginalL'auteur Riga