Automapper Ausnahme: "Fehlt der Typ der map-Konfiguration oder ein nicht unterstütztes mapping".
Ich versuche, mit Ninject in einem ASP.NET MVC 5-Anwendung, die verwendet AutoMapper für mapping-Modell zur Ansicht Modell und vice versa.
Leider bekomme ich eine Fehlermeldung, die besagt, dass der Typ der map-Konfiguration fehlt.
Erstellte ich ein Ninject dependency resolver:
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>();
}
}
}
Ich diese, einen Domänencontroller zu erstellen:
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);
}
}
}
Global.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();
}
}
}
Dieser ruft die AutoMapper-Konfiguration:
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();
}
}
}
Wenn ich diesen starte bekomme ich folgende Fehlermeldung:
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
Vermisse ich etwas.
Es funktionierte, bevor ich die Ninject dependency resolver.
Jetzt ist es nicht scheinen zu finden, die Zuordnungen.
Edit:
Wenn ich die Mapping-Erstellung direkt auf die controller-Methode funktioniert es:
[HttpPost]
public void AddRecord(AddRecordViewModel recordViewModel)
{
Mapper.CreateMap<AddRecordViewModel, Record>().ReverseMap();
var record = Mapper.Map<Record>(recordViewModel);
_myBLL.AddRecord(record, User.Identity.Name);
}
Die Zuordnung selbst und die Modelle und Modelle scheinen nicht das problem zu sein. Ich denke, dass das programm irgendwie nicht finden Sie die Zuordnungen.
Selbst wenn ich rufen Sie die Auto-Mapper Web-Konfiguration in der controller-Methode funktioniert es:
public void AddRecord(AddRecordViewModel recordViewModel)
{
Infrastructure.AutoMapperWebConfiguration.Configure();
var record = Mapper.Map<Record>(recordViewModel);
_myBLL.AddRecord(record, User.Identity.Name);
}
- Sie definiert eine AddRecordViewModel -> Platte, aber nicht die andere Weise herum. Sie brauchen eine zweite Zuordnung für den anderen Weg.
- Ich wurde nun das zweite mapping. Leider bekomme ich immernoch die gleiche Fehlermeldung. Es scheint, wie das Programm nicht finden Sie die Zuordnung.
- Hat Ihr
Record
irgendwelche virtuelles Eigentum? - Ich habe genau dieses problem. Ich habe noch andere Karten, die mit dem Queryable Erweiterungen (Projekt -) aber eine weitere Karte erstellt, weiterhin zu sagen, es ist kein mapping, obwohl die MapperConfiguration deutlich wird eine Karte erstellt, für die beiden Arten. Alle in das gleiche Projekt läuft auf der gleichen Maschine. Bitte helfen Sie mit!
- Wow, ich wusste gar nicht, dass mapperConfig.CreateMapper() war die Schaffung die EINZIGE Instanz, die die Zuordnungen! Ich habe mit Einspritzung zu bekommen, dass mapper, ich kann nicht einfach Automapper verwenden.Mapper.Anzeigen...
- Ich bin auch vor dem gleichen Problem. Sieht aus wie das Programm ist nicht in der Lage zu finden, die Zuordnung. helfen Sie mir, um herauszufinden, die Lösung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den reverse-mapping auch. Sie können es tun, gibt es zwei Möglichkeiten:
oder in einem gehen etwa so:
Letzteres ist vorzuziehen, wenn Sie mich Fragen.
Application_Start
?Nicht nennen Mapper.CreateMap in Ihrem Profil. Call-Basis.CreateMap, und Sie sind gesetzt:
Mapper.Initialize()
sollte verwendet werden, streng einmal pro Lösung.Wenn Sie anrufen
Initialize()
irgendwo später wird es überschreiben alle vorherigen Zuordnungen.Prüfen Sie Ihren code aufmerksam, erraten, finden Sie einen Aufruf dieser Methode in einem anderen Ort.
P. S.: Das war nicht erste Verhalten der Automapper früh, wie ich sehen konnte, in Stücke von code 3 und mehr Jahren auf GitHub.
Ich hatte ein ähnliches problem, ich habe vergessen, um sich in den Globalen.asax
In meinem Fall das problem war, dass einige Standard-Automapper mappings registriert mit der IoC.
Mapping, die versagten waren registriert in einem anderen Ort, die service-Konfiguration
Des Projekts waren, wurde dieser Fehler angezeigt wird, wurde ein test-Projekt, bei dem die service-Konfiguration wurde nicht ausgeführt. Wenn gedebuggt hatte die illusion, dass die fehlerhaften Zuordnungen wurden registriert, konnte sehen, die von IoC-Zuordnungen.
Lösung, stellen Sie sicher, dass alle Zuordnungen wurden registriert, in der test-Lösung.