ASP.NET contrôleurs MVC de base en assemblage séparé

j'utilise ASP.NET MVC Core RC-2. J'ai un projet web qui cible le cadre complet de .NET. J'ai également une bibliothèque de classe séparée dans la solution, ciblant également le cadre complet.

dans la bibliothèque de classe, j'ai un contrôleur, marqué avec un attribut route. J'ai fait référence à la bibliothèque du projet web. Cette assemblée fait référence au paquet nuget Microsoft.AspNetCore.Mvc v. 1.0.0-rc2-final .

j'ai cru comprendre que ce contrôleur externe être découvert automatiquement, par exemple http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers /

cependant cela ne fonctionne pas pour moi - je navigue à L'URL de la route et je reçois une page blanche et il ne frappe pas mon point de rupture de contrôleur.

des idées pour que ça marche?

fait intéressant, il semble fonctionner pour des projets Web ciblant. le ciblage .NET de Base. Mais pas pour un projet web ciblant le cadre complet, référencement d'une bibliothèque de classe standard .NET.

Note: Il s'agit du noyau MVC qui est supposé supporter ce genre de scénario sans n'importe quel MVC<=4 l'acheminement l'emporte sur .

20
demandé sur Community 2016-06-09 15:23:52

2 réponses

je crois que vous êtes en train de frapper le numéro connu suivant dans RC2. https://github.com/aspnet/Mvc/issues/4674 (la solution de contournement est mentionnée dans le bogue)

cela a été corrigé depuis lors mais ne sera disponible que dans la prochaine version (à moins que vous ne soyez d'accord avec l'utilisation de constructions nocturnes)

4
répondu Kiran Challa 2016-06-09 20:24:40

toujours un problème dans ASP.Net Core 1.0, Je ne suis pas sûr que ce soit prévu. La solution la plus simple est de le faire au démarrage.cs /ConfigureServices

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

AddApplicationPart inclut explicitement l'ensemble dans les recherches de contrôleurs. L'appel à AddControllersAsServices() ajoutera tous les controllers découverts dans la collection services, et si vous mettez un point de rupture après cette ligne et inspectez 'services', vous verrez dans la collection tous les Controllers les types qui ont été trouvés.

vous pouvez aussi vérifier ici: https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views comme les règles de découverte sont maintenant changées pour les contrôleurs de RC1.

n'oubliez pas D'utiliser IActionResult au lieu d'ActionResult!

43
répondu James Ellis-Jones 2017-05-19 11:30:42