Ich werde nicht diskutieren, ob Sie Ihre eigene Fassade um diese 3rd-Party-Klasse bauen können. Frühere Autoren haben Recht, die Bibliothek könnte so gestaltet sein, dass dies nicht möglich ist. Angenommen, sie haben einige gekoppelte Klassen, die Singletons haben, die in einer bestimmten Reihenfolge oder in ähnlicher Weise initialisiert werden sollten - es kann viele Designfehler (oder Features) geben, die Entwickler von Drittanbietern nie interessieren, weil sie nicht davon ausgehen, dass Sie sie verwenden ihre Bibliothek auf diese Weise.
Aber OK, nehmen wir an, dass das Erstellen einer Fassade keine unmögliche Aufgabe ist, und Sie haben tatsächlich nur ein Problem - gibt es zu viele Methoden, die Sie Wrapper um schreiben müssen, und es ist nicht gut, dies zu tun manuell.
Ich sehe drei Lösungen genau das Problem
1) zu adressieren Ich nehme an, dass neue „dynamische“ Arten von .NET 4.0 ermöglicht es Ihnen, dieses Problem zu umgehen, ohne „Morgen-Code“ schreiben Sie sollten verkapseln Sie eine Instanz der 3rd-Party-Klasse als privates Mitglied mit dem dynamischen Schlüsselwort in Ihre Klasse. Ihre Klasse sollte von Dynamic abgeleitet sein oder die IDynamicObject-Schnittstelle implementieren. Sie haben GetMember/setMember Funktionen zu implementieren, die alle Anrufe auf die verkapselte Instanz von 3rd-Party-Klasse
Well weiterleiten, c 4.0 # eine Zukunft ist, wir uns auf andere Lösungen finden Sie unter:
2) Schreiben Sie nicht Code manuell, wenn Sie eine erhebliche Anzahl an öffentlichen Methoden haben (sagen Sie mehr als 100). Ich würde eine kleine Konsole-App schreiben, die Reflexion verwendet und alle öffentlichen Mitglieder findet und dann automatisch Code zum Aufrufen der gekapselten Instanz generiert. Zum Beispiel
public type MethodName(params)
{
this.anInstanceOf3rdPartyClass.MethodName(params);
}
3) Sie können das gleiche tun wie 2, aber mit Hilfe der bestehenden Reflexions Tool, zum Beispiel RedGate .NET Reflector. Es wird Ihnen helfen, alle Klassen- und Methoden-Signaturen aufzulisten. Dann fügen Sie all das in Word ein und ein einfaches VB-Makro lässt Sie den gleichen Code generieren wie in 2. Anmerkung: Sobald Sie nicht den Code kopieren, sondern nur Signaturen der Kopiermethode, die öffentlich verfügbar sind Ich glaube nicht, dass Sie gegen die Lizenzvereinbarung verstoßen, aber es lohnt sich, es erneut zu überprüfen
Teil eins: http://blogs.msdn.com/ericlippert/archive/2008/09/26/preventing-third-party-derivation-part-one.aspx –
Teil zwei: http: //blogs.msdn .com/ericlippert/archive/2008/10/06/prevent-third-party-derivation-part-two.aspx –