2017-11-11 1 views
0

ich eine 3-Schicht-Web-Anwendung (web api ->Logik ->DAL) gemacht haben. Ein freigegebenes Projekt enthält alle Schnittstellen, die für die Injektion der Abhängigkeiten zwischen den Layern verwendet werden. Ich lade meine Layer als Komponenten mit MEF (Reflection). Somit hat das Web-API-Projekt keine Bauzeitabhängigkeit zu den anderen Layern! Dies bedeutet, dass die DLLs (logic.dll + DAL.dll) nicht im Ordner/bin der Web-API vorhanden sind - und somit wird das MEF meine DLLs nicht finden und laden..NET MEF laden unreferenced .dll

Alles funktioniert, wenn ich nur einen (unbenutzten) Verweis zwischen den Projekten in der Lösung hinzufüge - aber es macht keinen Sinn für mich, diese Abhängigkeit zu haben ... Der ganze Zweck der Verwendung von MEF-Komponenten war, alles zu entkoppeln und über Schnittstellen zu kommunizieren . :-)

Antwort

0

Sie können DirectoryCatalog für eine solche Aufgabe verwenden. Hier ein Beispiel:

var dirPath = @"Z:\MyAssemblies"; 
var registration = new RegistrationBuilder(); 
registration.ForTypesMatching(t => typeof(IFoo).IsAssignableFrom(t)) 
     .Export<IFoo>(); 
var dirCatalog = new DirectoryCatalog(dirPath,registration); 
var container = new CompositionContainer(dirCatalog); 

Wie Sie es recieves als Parameter den vollständigen Pfad zu dem Verzeichnis sehen können, wo youre DLLs sind. Es scannt es dann und macht bekannt MEF Zeug ..

So erreichen Sie, alles zu entkoppeln, wie Sie sagten.

+0

Ich sehe. Aber ich bin immer noch verwirrt. Muss ich einen Ordner erstellen (zB '@" Z: \ MyAssemblies "') wo ich meine DLLs speichere? Bedeutet das, dass ich meine gewünschten DLLs manuell dort hineinlegen muss? Ich benutze einen TFS-Build-Server. Wenn ich meine Anwendung auf dem IIS-Server erstelle - würde dieser Ordner dort nicht existieren, oder? –

+0

Sie können einen Ordner in Ihrem Projekt erstellen und dort DLLs hinzufügen und relative Pfade verwenden. Das habe ich gemacht – taquion

+0

'Path.Combine (Environment.CurrentDirectory," CoolDirName ");' zum Beispiel – taquion