2016-08-08 49 views
-1

zu tun, habe ich eine WCF-Projekt mit mehreren Schichten (und DTO-Objekt):AutoMapper, WCF und Multischichten: So Abhängigkeit

-Service (WCF Host)
-Business Layer (oder Domain Layer)
-Data Access Layer (unter Verwendung von Entity-Framework)

Um Datenbankinformationen abzurufen, möchte ich Autoadapter verwenden, um Entity-Objekt auf DTO-Objekt abzubilden.

Aber wenn ich Mapping in global.asax konfigurieren, ist mein Problem: Die Service-Schicht verweist nicht auf Datenzugriffsschicht (und ich will das nicht).

Wie kann ich tun?

Vielen Dank.

+0

was werden Sie zuordnen, DAC (Entity) zu Service Model oder DAC zu UI (ViewModel)? –

+0

Hallo, dac zu Service-Modell. Aber ich habe Business-Schicht zwischen Service und Daten – Alterinj

+0

Aber Ihre Datenschicht muss ein Modellobjekt, ein Objekt der Entität zurückgeben. Wenn dieses Modell von dac getrennt ist, können Sie auf das Modell in Ihrer Serviceebene verweisen. –

Antwort

0

Angenommen, Sie verwenden den AutoMapper 5.1, der das Scannen von Profilen umfasst. Zunächst mögen Sie Ihre Konfiguration in Profile an den entsprechenden Stellen setzen wollen:

public class EntityToDtoProfile : Profile { 
    public EntityToDtoProfile() { 
     CreateMap<Entity, Dto>(); 
    } 
} 

nächste in Ihrer WCF-Anwendung, wo die App Startup ist, werden Sie AutoMapper initialisieren, in dem Montag Namen vorbei zu scannen für Profile:

Mapper.Initialize(cfg => { 
    cfg.AddProfiles(new [] { 
     "MyLayeredApp.BLL", 
     "MyLayeredApp.DAL", 
     "MyLayeredApp.Service" 
    }); 
}); 

AutoMapper scannt diese Baugruppen nach Profilen und registriert sie in der Konfiguration. Stellen Sie sicher, dass Sie Mapper.Initialize nur einmal beim Start aufrufen, wie Sie es auch bei jeder anderen App-weiten Konfiguration tun würden.

Oder erstellen Sie einfach ein WCF-Projekt, reduzieren Sie alle diese Projekte in einem und verwenden Sie Ordnern für die Organisation statt all dies. Das funktioniert auch.