Karte async Ergebnis mit automapper

Sind wir createing eine Web.Api-Anwendung eine angularjs-Anwendung. Die Web -.- Api gibt json-Ergebnis.

Schritt eins war immer, die Daten:

    public List<DataItem>> GetData()
    {
        return Mapper.Map<List<DataItem>>(dataRepository.GetData());
    }

Arbeitete wie ein Charme. Dann machten wir die Daten repo async, und wir geändert, um code zu arbeiten.

    public List<DataItem>> GetData()
    {
        return Mapper.Map<List<DataItem>>(dataRepository.GetDataAsync().Result);
    }

Stil keine Probleme. Jetzt wollten wir machen meine Web.Api full async awayt also haben wir es geändert:

    public async Task<List<DataItem>> GetData()
    {
        return await Mapper.Map<Task<List<DataItem>>>(dataRepository.GetDataAsync());
    }

In diesem moment Automapper verwechselt wird. Zuerst mussten wir die folgenden mapper-Regel:
Mapper.CreateMap();

Diese arbeiteten, bis die web-api-Methode wurde voll async. Die Ausnahme sagte, es fehlt eine Karte von

 Task<ICollection<Data>> to Task<ICollection<DataItem>>.

Den mapper wurde geändert, um

Mapper.CreateMap<Task<List<Data>>, Task<List<DataItem>>>();

Bei der Validierung der Konfiguration, die Sie beklagt, dass das Ergebnis nicht zugeordnet werden können. Wie sollten wir konfigurieren Sie die Zuordnungen?

  • könnte man ändern in: var data = await dataRepository.GetDataAsync(); return Mapper.Map<List<DataItem>>(data);? Ähnlich wie hier: stackoverflow.com/questions/24827417/...
  • Aber dann der controller selbst ist nicht async mehr?
  • Die Methode markiert async und enthält die erwarten innerhalb des Körpers, so dass Sie nicht verlieren Ihre Zuordnung und immer noch async
InformationsquelleAutor Patrick | 2015-09-16
Schreibe einen Kommentar