2015-02-17 13 views
8

Buduję API odpoczynku z Web API2, Owin 3 i NInject Owinhost dla mojego DI.Web Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost, błąd przy uruchomieniu tylko

Na przykładzie dostarczone przez NInject, przez które tworzę obiekt „HttpConfiguration” i wywołać metody rozszerzenie NInject w startup.cs, otrzymuję błąd:

Error activating HttpConfiguration More than one matching bindings are available. Matching bindings: 1) binding from HttpConfiguration to method 2) self-binding of HttpConfiguration 3) binding from HttpConfiguration to constant value Activation path: 1) Request for HttpConfiguration

Suggestions: 1) Ensure that you have defined a binding for HttpConfiguration only once.

mojego kodu jest jak postępować przy starcie .cs: ​​

public void Configuration(IAppBuilder app) 
    { 
     Logger.Info("Entering Startup"); 

     config = new HttpConfiguration(); 

     ConfigureOAuth(app); 

     // Web API configuration and services 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter("Bearer")); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new {id = RouteParameter.Optional} 
      ); 

     var appXmlType = 
      config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(
       t => t.MediaType == "application/xml"); 
     config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 

     app.UseNinjectMiddleware(CreateKernel); 

     app.UseNinjectWebApi(config); 

     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 

     Logger.Info("Exiting Startup"); 

    } 


    public static StandardKernel CreateKernel() 
    { 
     kernel = new StandardKernel(); 
     kernel.Load(Assembly.GetExecutingAssembly()); 

     kernel.Bind<HttpConfiguration>().ToSelf().Named("TestHttpConfiguration"); 

     return kernel; 
    } 

Najdziwniejsze jest to, kiedy odświeżyć stronę w przeglądarce, błąd idzie, co pozwala mi wierzyć, że to dzieje się tylko do uruchamiania aplikacji.

Więc jestem z tym zdezorientowany. Czy ktoś miał do czynienia z tym samym problemem?

Dzięki

Vincent

+0

Właśnie zacząłem stawić czoło temu problemowi na nowym projekcie również. Oprogramowanie pośrednie wyrzucające ten błąd to: app.UseNinjectWebApi (config); Kiedy to komentuję, wszystko działa zgodnie z oczekiwaniami. Wciąż kopie, aby dowiedzieć się, co się dzieje. – sgmeyer

+1

Głupie przypuszczenie, ale co się stanie, gdy zabierzesz się za HttpConfiguration do TestHttpConfiguration? – sgmeyer

+0

Cześć, dziękuję za odpowiedź mi, niestety nie udało mi się dostać do pracy mój oryginalny projekt. Zobacz moją odpowiedź poniżej sortowałem ją od zera i instalując pakiety za pomocą konsoli. Tak jak Ty, to aplikacja app.useNInjectWebApi spowodowała błąd, ale nie ważne jak sobie z tym poradziłem, nie powiodło się to w tej konfiguracji. Nie jestem pewien, czy ci to pomoże, mam nadzieję, że tak. Daj mi znać. – vm2013

Odpowiedz

5

UPDATE

Po wypróbowaniu wszystkiego, udało mi się zmusić go do pracy przez ... Rozpoczęcie nowego projektu od podstaw. Miałem luksus robienia tego, ponieważ jest to dla mnie nowy dowód koncepcji.

Główna różnica polega na tym, że zainstalowałem wymagane pakiety (owin 3, ninject) za pomocą konsoli Package Manager, a nie interfejsu użytkownika. Postępowałem zgodnie z tym link tutaj, aby zainstalować te pakiety.

Następnie zauważyłem komunikat o błędzie na jednym z pakietów, ponieważ szukał zależności Owin 2 i nie mógł znaleźć żadnych. Zmusiłem go do zainstalowania przy użyciu parametru -DependencyVersion Highest jako parametru i od samego początku działał dobrze.

O ile nie przeoczyłem, nie widziałem tego błędu podczas instalacji pakietów przy użyciu interfejsu użytkownika. Czy jest możliwe, że pakiet nie został poprawnie zainstalowany wcześniej w moim drugim projekcie? Niepewny.

Mam nadzieję, że to komuś pomaga.

+13

Znalazłem problem z tym pakietem nugetów "Ninject.Web.WebApi" Podczas korzystania z wersji 3.2.0.0 istnieje błąd. gdy tylko zaktualizowałem ten pakiet nuget do wersji 3.2.4.0, wszystko działało bez żadnych dodatkowych zmian. – sgmeyer

+0

Dla mnie wszystko działało dobrze w rozwoju lokalnym, ale nie działało po wdrożeniu na platformie Azure. Zgodnie z rozwiązaniem sgmeyer, aktualizacja pakietu nuget do wersji 3.2.4 rozwiązała problem. – mkaj

+0

Zamiast tworzyć nowy projekt od podstaw, opróżniłem katalog bin, usunąłem folder paczek i przywróciłem wszystkie moje pakiety. – Ody

9

Miałem ten sam błąd, ponieważ z jakiegoś powodu zainstalowałem zarówno Ninject.Web.WebApi.WebHost i Ninject.Web.WebApi.OwinHost.

Jeśli szukasz źródła dla OwinWebApiModule.cs i WebApiWebHostModule.cs, oba moduły Ninject mają powiązanie z HttpConfiguration.

Usunąłem ten, którego nie potrzebowałem i wszystko działało.

+6

Może być konieczne ręczne usunięcie zawartości folderu '/ bin'. Mój miał plik DLL dla 'Ninject.Web.WebApp", mimo że usunąłem NuGet i References. Nawet Clean i Rebuild nie usunęli ich. Ręcznie usunąłem całą zawartość '/ bin' i wszystko zaczęło działać ponownie. – crush

Powiązane problemy