2016-07-14 20 views
0

Hat jemand versucht, ihre Drittanbieter-Instanzen mit Struktur Map zu verwalten?Integration von Third-Party-Bibliothek-Instanzen mit Struktur Karte

Für die längste Zeit, meine Herangehensweise an die Verwaltung von Third-Party-Bibliothek war es, einen Wrapper um die Bibliothek API zu schreiben.

Ich stehe vor einem Dilemma, wie man den Vorteil der Abhängigkeitsinjektion von Strukturkarten nutzen kann, während ich meine Wrapper weiterhin um Bibliotheken von Drittanbietern bewahre.

Zum Beispiel, wenn ich eine LibraryClass habe und ich meine Klasse WrapperClass. Mein Wrapper-Konstruktor sieht wie folgt aus.

class WrapperClass : IWrapperClass{ 
     var instance; 
     public WrapperClass(){ 
      instance = new LibrayClass(); 
     } 
    } 

Das Problem dabei ist, dass überall dort, wo ich in meinem Code verwende, kann ich dieses Objekt nicht verspotten, weil Strukturkarte Zugang zum LibraryClass Typ, um WrapperClass zu laden haben muss.

Was machen Menschen dafür? Sollte ich einfach den LibraryClass-Typ der Struktur-Map aussetzen und hoffe, dass dieser dann durch die Struktur Map geladen wird?

Antwort

0

Immer wenn ich eine Drittanbieter-Abhängigkeit injizieren musste, legte ich einen Wrapper mit einer Schnittstelle an. Anstatt das Objekt als Instanz zu exponieren, versuche ich die Funktion des zugrunde liegenden Objekts auf dem Wrapper darzustellen. Zum Beispiel gegeben AmazonS3 könnte die Wrapper-Klasse in etwa so aussehen

class FileStorage : IFileStorage 
{ 
    private AmazonS3 _amazon; 
    public FileStorage(AmazonS3 amazon) { _amazon = amazon } 
    void StoreFile(string file, string key) 
    { 
      _amazon.StoreFile(file, key); 
    } 
} 

können Sie dann IFileStorage in Ihrer Klasse injizieren, und weil es eine Schnittstelle können Sie diese Klasse zum Testen verspotten.

Und Sie registrieren den dritten Bibliotheksklassentyp in Ihrer Struktur-Map-Konfiguration.

+0

Will nicht Struktur map beschweren, dass der AmazonS3 ist nicht in der Struktur Karte Objekt Fabrik registriert? – Erion

+0

Sie haben je nach Bedarf einige Optionen. 1. Registrieren Sie AmazonS3 in Strukturmap 2. Richten Sie IFileStorage als () ein. Verwenden Sie () .ctor () .Is (new AmazonS3) 3. Nur neu Amazon3 im Konstruktor und entfernen Sie es aus der Parameterliste Für Nummer 2, kann ich mich nicht erinnern, ob das ein Singleton für den Konstruktor oder nicht tut, etwas zu prüfen, wenn Sie die Route gehen –

+0

ok das ist, was ich gefragt habe, so dass Sie den Third-Party-Bibliothekstyp offen legen die Strukturkarte. – Erion