Attualmente stiamo sviluppando un sistema dinamico che deve caricare alcune estensioni in fase di esecuzione.ASP MVC Core RC1 mette controller, viste e modello in altri assembly caricati in fase di esecuzione
Un'estensione è costruita sulla stessa architettura dell'app MVC, che significa una cartella controller, con classi che termina con Controller, View e ViewComponents associati che si trovano in/View/ControllerName e relativi modelli.
Non è possibile aggiungere questo progetto come riferimento al progetto, così ho creato un middleware che li carica in fase di esecuzione:
foreach (var item in extensions)
{
Assembly.LoadFrom([email protected]"extensions\{item.Name}.dll");
}
Fin qui tutto bene, vengono caricati sul runtime. Ma quando provo ad accedere a un percorso creato in uno dei controller di estensione, WebSite mi dà una risposta 404.
Ho provato ad aggiungere l'estensione come riferimento e funziona bene, quindi questo non è un problema all'interno della mia estensione.
Come posso registrare il controller di mia DLL nel sito principale MVC?
Questo non è ASP MVC 4, questo è ASP core, quindi, sembra che questa risposta non è valida: asp.net mvc put controllers into a separate project
Sebbene Dependency Injection potrebbe essere una soluzione, non trovato alcuna soluzione per rendere la mia estensione registra i servizi per se stesso (ed è complicato per i creatori di estensioni).
lato controllermio di routing per le estensioni è definito:
[Route("[controller]/[action]")]
public class LotteryController : Controller { ... }
Sul mio Startup.cs, ho mantenuto il percorso di default in realtà:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Il fatto è che io voglio la mia estensione abilitare il percorso: http://localhost/Lottery/Index
E mi dà una pagina vuota. Il mio attuale azione Index, a scopo di test, è
// GET Index
public IActionResult Index()
{
return Content("From extension");
//return View();
}
Ed ecco la mia estensione progetto gerarchia
È possibile che il problema riguardi il routing piuttosto che il codice responsabile del caricamento delle estensioni? Forse potresti fornire il codice del controller e/o la configurazione MVC in Startup.cs? – lawst
Aggiunti alla mia domanda – cdie
Ok, quindi sembra che tu stia utilizzando il routing predefinito. Potete anche fornire il metodo di controllo per "Indice"? Hai anche citato "View/ControllerName" nella tua domanda, tuttavia la struttura della directory di visualizzazione predefinita dovrebbe essere "Views/ControllerName", quindi puoi anche confermare che la vista si trovi nella posizione corretta? – lawst