Comment configurer Web Api 2 à regarder pour les Contrôleurs dans un autre projet? (tout comme j'ai l'habitude de faire dans l'Api Web)

J'ai utilisé à la place de mon contrôleurs dans un projet de Bibliothèque de classes dans Mvc, Web Api. J'ai utilisé pour ajouter la ligne suivante dans mon api web du projet global.asax de regarder pour les contrôleurs dans le projet:

ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");

Je n'ai jamais eu à faire toute autre configuration, sauf pour ajouter la ligne ci-dessus. Cela a toujours fonctionné pour moi.

Cependant, je ne peux pas utiliser la méthode ci-dessus pour faire la même chose dans WebApi2. Il ne fonctionne tout simplement pas. Le WebApi2 projet tente encore de trouver les contrôleurs dans son propre projet du dossier controllers.

- En donnant à petit résumé de mise à jour au bout de 2 mois (j'ai commencé prime sur ce):

J'ai créé un WebApiOne solution, il dispose de 2 projets, le premier est WebApi, et le deuxième est une bibliothèque de classes pour les contrôleurs. Si j'ajoute la référence à l'contrôleurs projet de bibliothèque de classes dans la WebApi projet, tout fonctionne comme prévu. c'est à dire si je vais à http://mydevdomain.com/api/values je peux voir le bon de sortie.

J'ai maintenant créer un deuxième projet appelé WebApiTwo, il dispose de 2 projets, le premier est WebApi2 projet, et la seconde est une bibliothèque de classes pour les contrôleurs. Si j'ajoute la référence à l'contrôleurs projet de bibliothèque de classes pour la WebApi2 projet, il fais PAS fonctionner comme prévu. c'est à dire si je vais à http://mydevdomain.com/api/values j'ai "Aucun type a été trouvé qui correspond le contrôleur nommé des "valeurs"."

pour le premier projet que je ne le fais pas tous les paramètres personnalisés à tous, je n'ai PAS:

ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");

dans mon global.asax, et je n'ai pas mis en œuvre de solutions personnalisées proposées par StrathWeb dans deux de ses articles de blog, car je pense que sa ne s'applique plus; parce que tous les travaux juste en ajoutant la référence du contrôleur de projet à la WebApi projet.

Donc je m'attends tout de même pour WebApi2 ... mais pas. Quelqu'un a vraiment essayé de faire cela dans WebAPi2 ?

  • Le code que tu montre est liée à des contrôleurs MVC qui n'a rien à voir avec l'API Web. Aussi longtemps que l'assemblée avec vos contrôleurs d'API Web a été chargé les Contrôleurs être trouvé.
  • +1 sur ce que Darrel est de mentionner
  • Cela peut vous donner quelques conseils sur ce que vous essayez de faire: strathweb.com/2013/08/...
  • merci ... que signifie alors qu'il travaillait en MVC4 et ne travaille PAS dans MVC5 ... je viens de créer deux temp projets pour démontrer cela, MVC4 avec WebApi est certainement de travail, mais MVC5 avec WebApi2 n'est pas ...
  • WebApi1 et WebApi2 les deux contrôleurs de charge de TOUS les assemblys chargés. Et d'autres que d'être regroupés dans un template, Web API de base zéro de la dépendance sur MVC. Vous avez besoin de savoir pourquoi votre contrôleur de l'assemblée n'est pas en cours de chargement.
  • les assemblages sont certainement chargement. je viens de faire ceci: var loadedAssemblies = domaine d'application.CurrentDomain.GetAssemblies(); et je peux voir mes contrôleurs assembler là ... ne peux pas obtenir ce pour travailler dans le web api2. d'autres idées ???
  • C'est un long shot, mais je dois poser la question - sont les classes de contrôleur et de méthodes MyClassLibraryProject.Les contrôleurs marqué en tant que public?
  • Cela devrait fonctionner out-of-the-box. J'ai fait un million de fois. Le Web Api de l'infrastructure des scans de toutes les assemblées chargées dans le AppDomain et ajoute toutes les classes qui héritent de ApiController pour le contrôleur de collection. Je pense que quelque chose d'autre se passe.
  • Alors, permettez-moi obtenir ce droit. Votre 1ère solution était dans WebApi v1, et le 2ème était dans WebApi v2, droit? J'ai essayé de reproduire le problème à l'aide de WebApi v2 (vs2013), que par la façon dont votre procédure mentionnée, cependant, j'ai été en mesure d'obtenir une réponse de mon contrôleur.