web-dev-qa-db-fra.com

Assurez-vous que le contrôleur a un constructeur public sans paramètre

Je reçois cette erreur

Une erreur s'est produite lors de la tentative de création d'un contrôleur de type 'AnalyticController'. Assurez-vous que le contrôleur a un constructeur public sans paramètre.

Le code fonctionne dans l'environnement de test, mais pas sur le serveur de production.

Une idée de ce qui pourrait causer le problème?

C'est mon contrôleur

public class AnalyticController : ApiController
{
    private AnalyticBLL analyticBLL = new AnalyticBLL();

    // POST api/status
    public void Post(AnalyticDTO analyticDTO)
    {
        if (!analyticBLL.Register(analyticDTO))
            helpers.BusinessLayer.CreateResponseException(analyticBLL.Errors);   
    }
}
8
GibboK

Ajoutez un constructeur public sans paramètre et le problème disparaît:

public class AnalyticController : ApiController
{
   public AnalyticController()
   {
   }

   // Variables and methods are the same as before
}
7

Cela dépend de la façon dont vous gérez DI (injection de dépendance). Par défaut, les contrôleurs ont besoin d'un constructeur sans paramètre, et vous devez utiliser quelque chose comme Unity ou Ninject pour gérer DI. Je vois que vous utilisez ApiController. Par conséquent, si vous utilisez Ninject, assurez-vous de télécharger Ninject for Web API . Si vous savez déjà tout ce que je viens de vous dire, vous devez alors donner plus d'informations. Quelle est votre configuration? Qu'utilisez-vous pour DI?

11
Pharylon

Je recevais cette erreur parce qu'une exception se produisait dans mon constructeur de paramètres. Cela n'a rien à voir avec la nécessité d'un constructeur sans paramètre malgré le message d'erreur.

4
user2444499

Je ne sais pas si cela aidera quelqu'un d'autre. Je construis et exécute ensuite mon application sur des services Web, le tout sur ma boîte (dev) locale. Ensuite, avant de me déployer en production, je lance mon application en pointant vers les services Web de production existants. Cela fonctionne généralement, mais cette fois, cela a fonctionné "in dev" mais m'a donné ceci "Assurez-vous que le contrôleur a un" message d'erreur constructeur public sans paramètre "en production" (enfin, pas vraiment en production mais contre les web services de production) .

Aucune de ces solutions ne semblait constituer un problème pour mon code et lorsque j'ai déployé mon code en production, je n'ai pas obtenu cette erreur lorsque tout est en production. Mon hypothèse est que cela peut avoir à voir avec différentes versions des paquets NuGet entre ma boîte de production et mon développement. Je vais enquêter, mais je voulais juste proposer ceci au cas où d'autres personnes auraient une situation similaire "travaille contre dev mais pas prod". Cela peut être un problème d’environnement (selon ce que vous entendez par ne fonctionne pas "en prod").

0
rsmith