2017-11-15 3 views
1

Ich habe das Plugin-Architektur http://www.squarewidget.com/pluggable-architecture-in-asp.net-mvc-4 beschriebenFiring Application_Start für ein Plugin

Dies scheint zu funktionieren gut, aber jetzt brauche ich das Plugin, in der Lage sein, einige Aspekte des Wirtes, in meinem Fall zu ändern, hinzufügen eine neue Rolle für die Rollen.

Ich denke, der beste Platz für die Rolle wäre in der application_start des Plugins global.asax, aber es scheint, dass nicht gefeuert wird.

Ich habe sehr begrenzte Kenntnisse von ninject, das ist, wie die Plugin-Architektur verwaltet wird, aber ich nehme an, dass ich etwas in die RegisterServices der NinjectWebCommon.cs, die in meinem Host ist.

Wie erzwinge ich, dass das global.asax meines Plugins aufgerufen wird, wenn meine Anwendung gestartet wird?

Dies ist MVC4. C# Danke.

Antwort

1

Haben Sie einen genaueren Blick auf die NinjectWebCommon.cs-Datei finden Sie einige Attribute zu Beginn WebActivatorEx.PreApplicationStartMethod und WebActivatorEx.ApplicationShutdownMethod (oder vielleicht auch nur WebActivator. je nach Version) bemerken

WebActivatorEx die Bibliothek ermöglicht Code auszuführen automatisch auf Ereignisse des Lebenszyklus der Anwendung.

Was Sie tun müssen, ist „jsut“ Hinzufügen einer MyModuleStartup.cs Datei im App_Start Ordner Ihres Moduls mit dem folgenden Code:

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyModule.App_Start.MyModuleStartup), "Start")] 
namespace MyModule.App_Start 
{ 
    public static class MyModuleStartup 
    { 
     public static void Start() 
     { 
     MyBusinessClass.RegisterMyCustomRole("MyNewRole"); 
     } 
    } 
} 

Sie müssen PostApplicationStartMethod statt PreApplicationStartMethod testen können, wenn Sie brauchen Ihre App muss vollständig eingerichtet sein, bevor Sie Ihre neue Rolle hinzufügen.

+0

Danke. Das funktioniert (obwohl ich ein Problem habe, das außerhalb der Reichweite dieser Frage liegt). Anfangs konnte ich WebActivatorEx nicht finden, da es in meinem Plugins-Projekt nicht referenziert wurde (es gab keinen Grund dafür). Die Referenz hinzugefügt und jetzt ruft sie auf. Ich fand auch, dass alle meine using-Anweisungen innerhalb des Namespace sein mussten. – David