2016-10-21 2 views
0

Ich habe eine PCL, die eine Reihe von Basisklassen enthalten soll, damit ich sie nicht für jedes Projekt neu erstellen muss. Jetzt überlege ich, Facebook hinzuzufügen, da ich jedes Mal, wenn ich mein PCL in einem Projekt verwenden möchte, auf eine externe DLL verweisen muss, auch wenn es ein Projekt mit nur wenigen Bildschirmen ist, weil ich Fehler gemacht hätte, wenn ich es nicht gemacht hätte. t.Wie kann ich optional eine externe Bibliothek hinzufügen?

Für diejenigen, die sagen, das ist kein Problem: Ich habe vor, noch mehr externe DLLs hinzufügen, die ich nicht jedes Mal brauche.

Wie kann ich das lösen? Ich möchte den Code, um diese DLL in meinem PCL verwenden, aber ich möchte nicht gezwungen werden, die DLL jedes Mal, wenn ich die PCL verwenden.

Antwort

1

Das Problem hier ist, dass Sie wahrscheinlich Typen aus der externen Bibliothek in Ihrem Code verwenden möchten, und Sie nicht tun können, ohne die Bibliothek zu referenzieren.

Ein Weg um dieses Problem herum ist, indem Sie Reflexion verwenden, aber Ihr Code wird viel komplexer und Sie wünschen, dass Sie nicht taten.

Eine andere Lösung ist:

  • für jede externe Abhängigkeit eine Schnittstelle erstellen in Ihrem "gemeinsamen PCL" (dh ISocialMediaPlatform für die Facebook.).
  • Erstellen Sie eine neue PCL für jede externe Abhängigkeit, dass Verweise sowohl Ihre „gemeinsame PCL“ und die externe Bibliothek und hat eine Klasse, die eine dieser Schnittstellen implementiert (dh. FacebookSocialMediaPlatform : ISocialMediaPlatform)
    • Diese Implementierung dann verweisen kann die externe Abhängigkeit und seine Typen direkt
  • die Umsetzung jeder Schnittstelle in die „gemeinsame PCL“ Reflexion unter Verwendung von Spritzen verwenden oder ein Dependency Injection-Framework

Dies fügt eine weitere Ebene der Komplexität hinzu, aber als Nebeneffekt macht es auch Ihren üblichen PCL-Code testbar.

Die Lösung, die ich persönlich bevorzugen würde, ist es, kein großes "gemeinsames PCL" zu haben, sondern es in ein paar kleinere aufzuteilen, die eine bestimmte Rolle erfüllen.

+0

Nun mein Problem ist, dass ich etwa 20 Bibliotheken haben, die ich optional hinzufügen möchte, und mehr in der Zukunft kommen. Diese Bibliotheken müssen nur einmal in einer "setup" -Methode referenziert werden, die von der Plattform aufgerufen wird, normalerweise mit einer App oder einem API-Schlüssel, der in der Klasse "application" abstrakt oder virtuell ist. Ich sehe also nicht, wie ich für jede dieser Plattformen neue PCLs erstellen und sie mit den richtigen API-Schlüsseln verbinden kann. Ich habe auch über das Verknüpfen nachgedacht, wo ich Anmerkungen hinzufügen kann, wenn ich sie brauche oder nicht (wenn das sogar so funktioniert), könnten Sie eine Lösung hinzufügen, die den Linker verwendet? – vrwim

+0

Ich kann dir nur raten, die Dinge klein und einfach zu halten, ich möchte dir nicht die Mühe geben, dir zu helfen, etwas zu erschaffen, das ich für eine nicht zu behaltende Monsterbibliothek halte. Das ist nur meine Meinung, nichts für ungut. –

Verwandte Themen