2016-06-09 34 views
16

Sto utilizzando ASP.NET MVC Core RC-2. Ho un progetto web rivolto al framework .NET completo. Ho anche una libreria di classi separata nella soluzione, anch'essa mirata all'intero framework.Controller MVC ASP.NET Core in un assieme separato

Nella libreria di classi, ho un controller, contrassegnato con un attributo route. Ho fatto riferimento alla libreria di classi dal progetto web. Questo assembly fa riferimento al pacchetto nuget Microsoft.AspNetCore.Mvc v. 1.0.0-rc2-final.

Era a mia conoscenza che questo controller esterno sarebbe stato rilevato automaticamente, ad es. http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/

Tuttavia questo non funziona per me- navigo all'URL del percorso e ottengo una pagina vuota e non colpisce il mio controller punto di interruzione.

Qualche idea su come farlo funzionare?

È interessante notare che sembra funzionare per progetti Web rivolti a .NET Core Framework, facendo riferimento a una libreria di classi che utilizza anche .NET Core. Ma non per un progetto web rivolto al framework completo, facendo riferimento a una libreria di classi .NET standard.

Nota: questo è MVC Core che dovrebbe supportare questo tipo di scenario senza alcun MVC<=4 routing overrides.

+0

Possibile duplicato di [Come registrare un controller in ASP.NET MVC quando la classe controller si trova in un altro assieme?] (Http://stackoverflow.com/questions/7560005/how-to-register-a-controller -into-asp-net-mvc-quando-the-controller-class-is-in-a) – Oscar

+0

Questo è MVC Core - nuovissimo stack ASP.NET – booler

risposta

4

Credo che si stia verificando il seguente problema noto in RC2. https://github.com/aspnet/Mvc/issues/4674 (soluzione è menzionato nel bug)

Questo è stato risolto da allora, ma sarà disponibile solo nella versione successiva (a meno che non si sono ok con l'utilizzo di nightly build)

36

ancora un problema in ASP.Net core 1.0, non sono sicuro che sia di progettazione ora. soluzione più semplice è quella di farlo in Startup.cs/ConfigureServices

services.AddMvc() 
    .AddApplicationPart(typeof(<class in external assembly>).GetTypeInfo().Assembly) 
    .AddControllersAsServices(); 

AddApplicationPart include esplicitamente il gruppo nelle ricerche per i controllori. La chiamata a AddControllersAsServices() aggiungerà tutti i controller rilevati alla raccolta di servizi e, se si inserisce un breakpoint dopo questa riga e si ispezionano i 'servizi', nella raccolta verranno visualizzati tutti i tipi di controller trovati.

Si potrebbe anche voler controllare qui: https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views come le regole di scoperta sono ora cambiate per i controller da RC1.

Ricordarsi inoltre di utilizzare IActionResult anziché ActionResult!

+6

Per me solo usando '.AddApplicationPart (typeof (). Assemblea) 'era abbastanza. Puoi anche usare un'altra riga: '.AddApplicationPart (Assembly.Load (" ExternalAssemblyName "));' – Learner

+1

Deve essere progettato in questo momento, sarebbe orribile accenderlo dopo il fatto. – Ciantic

+0

Fatto la stessa cosa ma non ci riesce – DanilGholtsman

Problemi correlati