Ich habe einige Module, die Controller und Ansichten hat. Es ist im Grunde eine Erweiterung für meine Webanwendung. Jedes Modul befindet sich in einer Klassenbibliothek.Wie können Controller und Ansichten von einem externen Projekt in MVC6 integriert werden?
Ich möchte diese Baugruppen aus meiner Webanwendung laden. Aber ich habe kein Glück hier.
Meine Lösungen Dateistruktur ist wie:
src
|
|-- Web.Common (Class Library Project)
| |- Files like: filters, my own controller etc...
|
|-- WebApplication (ASP.NET5 WebSite)
| |- wwwroot
| |- Controllers
| |- Views
| |- etc...
|
|-- Module 1 (Class Library Project)
| |- Controllers
| |- Views
|
|-- Module 2 etc...
Diese sind, was ich versucht:
Ich habe versucht, mein eigenes IViewLocationExpander
public class CustomViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
yield return "/../Module1.Web/Views/Home/TestView.cshtml";
yield return "../Module1.Web/Views/Home/TestView.cshtml";
yield return "/Module1.Web/Views/Home/TestView.cshtml";
yield return "~/../Module1.Web/Views/Home/TestView.cshtml";
}
public void PopulateValues(ViewLocationExpanderContext context)
{
}
}
Ich habe versucht, zu implementieren alle Arten von pa ths, die
ich mir in den Sinn, aber kein Glück :(kam:
InvalidOperationException: Die Ansicht ‚Testview‘ wurde nicht gefunden. Folgende Standorte wurden gesucht:
~/Module1.Web/Ansichten/Home/TestView.cshtml ~ /../ Module1.Web/Ansichten/Home/TestView.cshtml /Module1.Web/Views/Home/ TestView.cshtml /../Module1.Web/Views/Home/TestView.cshtml
Also dachte ich, vielleicht die Standard IFileProvider nicht außerhalb des root-Pfad der WebApp sieht und beschlossen, zu versuchen, meine Umsetzung eigener IFileProvider.
Aber hier hatte ich auch keinen Erfolg.
Vielleicht gibt es eine Funktion, um dies zu erreichen, indem Sie einige ASP.NET-Methoden aufrufen, aber ich weiß es nicht.
Irgendwelche Vorschläge?
Ich hätte gerne mehrere Baugruppen, die Sichten und Steuerungslogik in eine zentrale Web-App einbringen. Irgendwelche Gedanken darüber, wie man ein Array von FileProvidern anvisiert? – Matthew
@Matthew, 'CompositeFileProvider' akzeptiert eine Sammlung von' FileProviders', so dass Sie beliebig viele registrieren können. 'neuer CompositeFileProvider (EmbeddedFileProvider, EmbeddedFileProvider, EmbeddedFileProvider, etc)'. –
@Matthew, wenn Sie sich die Beispielimplementierung ansehen, mit der ich oben verlinkt habe, sehen Sie ein Beispiel, in dem ich Ansichten von mehreren Assemblys einlese. Hier ist der entsprechende Code: https://github.com/johnnyoshika/mvc6-view-components/blob/master/Web/Startup.cs#L27 –