Autofac - Assurez-vous que le contrôleur a un constructeur public sans paramètre
Je sais que c'est été posées et répondues avant - la raison pour laquelle je suis demander c'est parce que (je pense) j'ai essayé toutes les solutions proposées à ce problème, mais ne peut toujours pas résoudre.
J'ai un ASP.NET l'API Web 2.0 projet. J'ai Autofac, Autofac.Mvc5 et Autofac.WebApi2 dépendances installé. Quand j'essaie d'appeler une API contrôleur j'obtiens l'erreur suivante:
Une erreur s'est produite lors de la tentative de créer un contrôleur de type 'MyController'. Assurez-vous que le contrôleur a un sans paramètre constructeur public.
Dans mon Global.asax
j'ai un appel à IocConfig.Config()
que j'ai placé à l'intérieur de App_Start
:
public static class IocConfig
{
public static void Config()
{
var builder = new ContainerBuilder();
builder.RegisterType<MyLogger>().As<IMyLogger>();
builder.RegisterApiControllers(Assembly.GetCallingAssembly());
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
WebApiApplication.Container = builder.Build();
DependencyResolver.SetResolver(
new AutofacDependencyResolver(WebApiApplication.Container));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(WebApiApplication.Container);
}
}
Et c'est le constructeur de MyController
:
public MyController(IMyLogger logger)
Quand j'essaie d'appeler, je reçois l'erreur spécifiée sur le constructeur. Ce qui me manque?
source d'informationauteur developer82
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré cette erreur ainsi que la cause était que l'un des Contrôleur de dépendances n'est pas correctement enregistrés dans le Autofac.
La InnerException a le détail (dans mon cas c'était un Autofac.De base.DependencyResolutionException) et le ExceptionMessage inclus le détail de cette dépendance. Le long des lignes de:
Assembly.GetCallingAssembly()
sera de retour à l'appel de l'assemblée, et non pas l'assemblée où vos types est défini.Afin de rendre cela fonctionne, vous devez utiliser
typeof(IocConfig).Assembly
ouAssembly.GetExecutingAssembly
Vérifier cette réponse.
Il m'aide à configurer corriger
ContainerBuilder()
pour WebApi contrôleurs.Si vous êtes à la recherche ici une solution pour une telle erreur, vous devriez vérifier votre DependencyResolver Configuration de la première.
Je pose la même question, et le problème était que j'étais en utilisant l'Autofac des exemples de code pour
ContainerBuilder()
objet pour les contrôleurs MVC et pas de l'API.Mon code pour enregistrer les deux type de contrôleur (MVC et de l'Api):
Je pense que vous êtes absent de l'enregistrement autofac à l'application code de départ.
Utiliser ceci:
Pour plus de détails, reportez-vous à ce blog http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac
Ouvert, vous ServiceModule Fichier
Registre de l'Interface et le nom de service de ceux qui sont mentionnés dans le contrôleur.
Exemple sont comme ci-dessous:-
builder.RegisterType().Comme();