Mittwoch, 26. Juni 2013

Idee für ein PlugIn-System

Ein netter User hatte die Idee ein PlugIn-System für Arengu einzuführen ( siehe: Kommentare von "Map-Editor: Halbzeit" ).
Die Idee von Plugins gab mir schon seit längerer Zeit ein kleines Rätsel hinsichtlich der Funktionsweise auf, weswegen ich mich ein bisschen näher damit beschäftigt habe und siehe da:
Ich habe nun ein Beispielcode für meine Idee von einem Mini-PlugIn-System hochgeladen.

Meine Vorgehensweise:
Für die DLL gebe ich einen Namespace, einen Klassennamen und einen Methodennamen vor, damit ich ( also das Spiel im Endeffekt ) weiß, was ich ausführen muss.

In eigener Sache:
Bitte schaut es euch an ( sind nur ein paar Zeilen ) und sagt, was ihr davon haltet und was man - mit Sicherheit - verbessern kann. Vielen Dank dafür schonmal.

Download ( 7z - 12,9 MB): arengu.square7.ch/Arengu/ExampleCodes/Reflection.7z

mfg
Hauke

12 Kommentare:

  1. Jo, kannst natürlich machen. Professioneller wärs aber auf diese Art:

    Du machst eine DLL mit einem Interface (ich gehe jetzt mal davon aus, du weißt, was das ist. Wenn nicht -> sowas wie ne abstrakte Klasse. (Projekt -> Hinzufügen -> Neues Element -> Schnittstelle))
    und das Plugin muss wiederum die DLL mit dem Interface einbinden, und von diesem ableiten ...

    Vorteile:
    * Name beliebig
    * Der Benutzer weiß ohne anleitung welche methoden er reinmachen muss (rechtsklick auf deine klasse -> schnittstele implementieren)
    * Du kannst in deinem Code die Methode ganz normal aufrufen (ohne invoke ...)

    Viel Glück ;)

    AntwortenLöschen
  2. Joa, ich hab dir mal sowas in der Art hochgeladen:

    http://www.file-upload.net/download-7763073/Plugin-bsp.zip.html

    AntwortenLöschen
    Antworten
    1. Hab verstanden, ein wenig komplizierter, aber geht schon ;)
      Aber du hast ja geschrieben, dass er eine Instanz der "erstbesten Klasse implementiert", das heißt doch, wenn ich zwei Klassen habe, kann es sein, dass er die implementiert, die ich nicht als Instanz haben möchte ( sofern das der Fall sein sollte ) oder?
      Ähnliche Frage: Gibts es eine Regel nach der eine Klasse die "erst"beste ist?

      mfg
      Hauke

      Löschen
    2. Wenn man so blöd ist, dass man zwei Klassen erstellt, die BEIDE das IPlugin-Interface implementieren, ist man selber schuld :D. Die "erstbeste" ist in dem Fall die, die von Assembly.GetTypes() als erste gefunden wird ... denn sie steht am Anfang der List und .First() nimmt einfach nur den ersten (und hoffentlich einzigen) Eintrag aus der Liste

      Löschen
    3. Gut^^ nur für denn Fall ;)
      Auf jedenfall bedanke ich mich schonmal für die Tipps und lehrreichen Informationen, die ich mit Hohe wahrscheinlichkeit verwenden werde :)

      Löschen
  3. Dll´s....ich binn raus xD

    hab noch nie ne Dll gemacht und habs eig nicht vor...

    AntwortenLöschen
  4. Das YT vid ist auf privat, das kann keiner sehen

    AntwortenLöschen