Laden...

asp.net mvc 5 nuget-plugin-system

Erstellt von M@TUK vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.541 Views
M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 9 Jahren
asp.net mvc 5 nuget-plugin-system

Hi...

im Internet findet man ein paar Ansätze wie man eine MVC-Anwendung mit Hilfe von Nuget pluginfähig machen könnte. Mir würde dieser Ansatz extrem gut gefallen da man vieles "Out of the box" bekommt (Veröffentlichung, Hosting, Versionierung, Abhängigkeiten, Updaten von Packages,....).

Nur was man nirgends findet sind Infos wie dann solche Plugins entwickelt werden.

Bei Packages die nur dlls enthalten ist das jetzt nicht so das Problem (eigenes Projekt).
Was aber wenn Plugins aufwändiger sind bzw. mehr enthalten als nur dlls die in den bin-Ordner kopiert werden müssen.

Beispiel:

Theme für eine Webseite
Hier gibt's Views (cshtml), Images, Css-Dateien.
Die müssen beim Installieren des Packages ja in die Application kopiert werden.

oder
Modul für das Backend
Hier gibt's neben Controllern ebenfalls Views, JS-Files,... die in die Application kopiert werden müssen.

Wie könnte hier die Entwicklungs-Seite aussehen?
Entwickeln eines Plugins, testen/debuggen, veröffentlichen des Packages, Quellcode-Verwaltung...

Hat das schonmal wer ausprobiert?

lg

16.827 Beiträge seit 2008
vor 9 Jahren

Alle Dateien in einer Webanwendung können igrendwo liegen; die müssen nich im Anwendungsordner liegen.
Einzig Ressourcen-Dateien wie CSS müssen halt von Außen erreichbar sein; aber selbst das kann ein ganz normaler ActionResult sein, wo man eben den Response anpasst (wie beim File Download).

Pluginfähige MVC Umgebungen kenn ich; aber eher speziell und kein Produkt wie Wordpress.
Wie die Entwicklungsseite eines Plugins aussieht richtet sich immer danach, was die Hauptapplikation durch die entsprechenden Interfaces überhaupt anbietet.
Insgesamt sind Plugin-Webseiten dann doch recht selten (im Gegensatz zu Desktop-Umgebungen).

2.223 Beiträge seit 2005
vor 9 Jahren

Hallo M@TUK,

In einem Nuget Packet kannst du nicht nur dlls einbinden, es könnten auch zusätzlich Views, css oder js Komponenten integriert sein, die beim Installieren des jeweiligen Packetes auch in bestimmte Unterordnen gepackt werden. Und wenn dir die native Möglichkeiten von Nugget nicht reichen sollten kann zuguterletzt immer noch eine ps Datei eingebunden werden, die die Installation für dich übernimmt.

Allerdings würde ich die Plugins nicht in das Bin Directory rein packen, sondern eher in einem unterordnen Namens Plugins.

Natürlich musst du dich dann auch selber, um das Laden und registrieren der jeweiligen dll kümmern

Für die ganzen anderen Dateien, könnte man den Ordner Areas verwenden
Areas in ASP.NET MVC 4

Viele Grüße
Lars

742 Beiträge seit 2005
vor 9 Jahren

Das ganze ist nicht so einfacher. Vll. kann NuGet sogar helfen, daran hätte ich jetzt spontan nicht gedacht, aber du musst eine ganze Reihe von weiteren Problemen lösen, insbesondere, wenn du Plugins zur Laufzeit ohne Neustart laden möchtest.

  1. Wie kannst du dynamische Routen registrieren? Relativ leicht geht das mit Attributen.
  2. Wie machst du Views zur Laufzeit bekannt? Hier könnte dir evtl. das Caching einen Streich spielen.
  3. Möchtest du Plugins auch wieder entladen?
  4. Wie melden Views Anforderungen an Skripte und Styles an, gibt es hier ein automatisches Bundling?
  5. Funktioniert Razor-Intellisense auch für Plugins (das ist echt ein nerviges Thema).
  6. Sollen Plugins isoliert ablaufen oder nicht?
  7. ...

Also einfach wird es nicht, es ist aber auch nicht unlösbar.

Ich würde dir empfehlen, dir das Orchard-CMS anzuschauen. Die Usability ist meiner Meinung nach grausam aber man kann trotzdem einiges daraus lernen.

16.827 Beiträge seit 2008
vor 9 Jahren

Ich hab Building a Composite ASP.NET MVC Application with Pluggable Areas from External Projects and Assemblies noch in meinen Favouriten.
Selbst nicht ausprobiert aber finde es vom Lesen her ein sehr vielversprechendes Konzept.

M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 9 Jahren

Hi...

naja, hab mir fast gedacht dass es in der Praxis dann etwas komplizierter ist als es die Theorie den Anschein macht.

Orchard-Sourcecode hab ich mir schon geholt.