2016-01-07 4 views
1

J'utilise Ninject pour l'injection de dépendances dans mon projet ASP.NET Web Api 2. Tout fonctionne parfaitement localement via Visual Studio et IIS Express, mais lorsque je déploie sur IIS, les dépendances ne sont pas résolues. Ci-dessous mon Startup.csASP.NET Web Api 2, Ninjet, OWIN et IIS

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var webApiConfiguration = new HttpConfiguration(); 
     webApiConfiguration.EnableCors(); 
     webApiConfiguration.SuppressDefaultHostAuthentication(); 
     webApiConfiguration.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     webApiConfiguration.MapHttpAttributeRoutes(); 

     app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(webApiConfiguration); 

     ConfigureAuth(app); 

     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

     app.Run(async context => 
     { 
      await context.Response.WriteAsync("Welcome to Web API"); 
     }); 
    } 

    private static IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
     kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 
     kernel.Load(new CourseModule(), new DataPullModule(), new DegreeModule(), new ResponseModule(), new RestSharpModule()); 

     return kernel; 
    } 
} 

L'erreur que je reçois est lorsque vous essayez d'accéder à l'un de mes contrôleurs est ci-dessous:

Une erreur est survenue lors de la tentative de créer un contrôleur de type « DegreeController ». Assurez-vous que le contrôleur a un constructeur public sans paramètre.

Voici mon constructeur de la DegreeController:

public DegreeController(IDegreeMapper degreeMapper, IDegreeRepository degreeRepository) 
    { 
     _degreeMapper = degreeMapper; 
     _degreeRepository = degreeRepository; 
    } 

Et voici le DegreeModule où je lie les interfaces aux classes.

public class DegreeModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IDegreeController>().To<DegreeController>().InRequestScope(); 
     Bind<IDegreeMapper>().To<DegreeMapper>().InRequestScope(); 
     Bind<IDegreeRepository>().To<DegreeRepository>().InRequestScope(); 
     Bind<IDegreeRatingCalculator>().To<DegreeRatingCalculator>().InRequestScope(); 
    } 
} 
+0

Pourriez-vous montrer les constructeurs de DegreeController? – Win

+0

Édité. Faites-moi savoir si vous voulez en voir plus. –

+0

Cela se produit-il dans un seul contrôleur ou dans tous les contrôleurs? – Win

Répondre

1
var kernel = CreateKernel(); 
app.UseNinjectMiddleware(() => kernel).UseNinjectWebApi(configuration);