12
votes

Une erreur s'est produite lors de la tentative de création d'un contrôleur de type 'tynebenewscontroller'

J'ai cherché longtemps et dur mais n'a rien trouvé qui a encore aidé. Où est-ce que je vais mal? Je ne sais vraiment pas quoi faire. J'ai écrit tous les détails ci-dessous. J'ai essayé et n'ai pas réussi.

Une erreur s'est produite lors de la tentative de création d'un contrôleur de type 'Tynebenewscontroller'. Assurez-vous que le contrôleur a un Constructeur public sans paramètre. P> blockQuote> xxx pré>

mon apicontroller: p> xxx pré>

erreur: p> xxx pré>

BOOTSTRAPPER CLASSE: P>

 public class TypeNewsService : ITypeNewsService
    {
        private readonly ITypeNewsRepository _typeNewsRepository;
        private readonly IUnitOfWork _unitOfWork;
        public TypeNewsService(ITypeNewsRepository typeNewsRepository,
            IUnitOfWork unitOfWork)
        {
            _typeNewsRepository = typeNewsRepository;
            _unitOfWork = unitOfWork;
        }

        #region ITypeNewsService Member

        public void AddTypeNews(TypeNews typeNews)
        {
            _typeNewsRepository.Add(typeNews);
            SaveTypeNews();
        }

        public void DeleteTypeNews(int id)
        {
            _typeNewsRepository.DeleteById(id);
            SaveTypeNews();
        }

        public IEnumerable<TypeNews> GetTypeNewss()
        {
            var output = _typeNewsRepository.GetAll();
            return output;
        }

        public void SaveTypeNews()
        {
            _unitOfWork.Commit();
        }

        #endregion

    }

    public interface ITypeNewsService
    {
        void AddTypeNews(TypeNews typeNews);
        void DeleteTypeNews(int id);
        IEnumerable<TypeNews> GetTypeNewss();
        void SaveTypeNews();
    }


0 commentaires

4 Réponses :


-5
votes

Pour contrôleur, vous devez avoir un paramètre moins constructeur. Si vous souhaitez utiliser un constructeur paramétré, veuillez utiliser le code comme ci-dessous.

Objet Pass de type de type de type B>

private readonly ITypeNewsService _typeNewsService;
public TypeNewsController():this(new TypeNewsService ())
{
} 
public TypeNewsController(ITypeNewsService typeNewsService)
{
   _typeNewsService = typeNewsService;
}


1 commentaires

L'affiche a demandé comment "injecter" une instance dans un constructeur paramétré. Veuillez lire sur l'injection de dépendance. S'il avait voulu créer une nouvelle instance à l'aide du mot clé «Nouveau», il n'aurait pas besoin de le transmettre à partir du constructeur par défaut à un constructeur paramétré dans la même classe.



19
votes

Votre contrôleur est webapi contrôleur et inscription à l'autofac diffère de l'enregistrement MVC. Webapi n'utilise pas dépendencyensolver , vous devez donc indiquer WebAPI d'utiliser le résolveur Autofac spécifiquement.

Vous devez ajouter ceci à votre setutoTofaccontainer Code: < / p> xxx

voir https: // code. google.com/autofac/wiki/webapiintegration Pour plus d'informations.


3 commentaires

Nice, battez-moi juste à la même réponse.


Erreur: «Les règles de sécurité de l'héritage violées lorsqu'un membre primordial:« Autofac.Integration.webapi.AutofacwebapidePendencyResolver. Beginscope () '. L'accessibilité de la sécurité de la méthode de dépassement doit correspondre à l'accessibilité de la sécurité de la méthode étant remplacée. '


Je change de la version Autofac.Webapi2 de 3.3.3 à 3.3.0. Ça marche. Merci



11
votes

Dans mon cas, la raison était que le résolveur ne pouvait pas trouver de cartographie. C'est-à-dire que supposons dire que HomeController a une dépendance à l'iDumb, le résolveur n'a pas pu trouver une implémentation concrète de Dumb, qui implémente iDumb.

En d'autres termes, le message d'erreur P>

**No parameterless constructor defined for this object
An error occurred when trying to create a controller of type 'ToDoListT1.WebApp.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor**


2 commentaires

J'ai eu le même problème et j'ai des interfaces non implémentées, cela ressemble donc à cela. Merci! +1!


Il semble que WEB API affichera cette erreur si le constructeur d'une apicontroller jette une exception, peu importe ce qu'il est. J'ai également eu un problème avec Ninject, mais vous pouvez voir le même comportement si vous n'ajoutez que lancer une nouvelle exception ("Sadface"); au constructeur.



0
votes

Vous assurez que vous appelez le même type d'appel, je veux dire, obtenir, poster, mettre et quel type vous avez dans la méthode du contrôleur.

et devez-vous ajouter votre référentiel valide à NijectConfig.cs pour le contrôleur.

kernel.bind <[IREPO]> (). Pour <[repo]> (). IndrequestScope ();


0 commentaires