Wiem, że jest kilka pytań podobnych do tego, ale ponieważ nie mogę zlokalizować żadnej dokumentacji i żadne z pozostałych pytań nie ma odpowiedzi, które mogłyby mi pomóc, oto:Uzyskanie najnowszego produktu Ninject przy użyciu najnowszego MVC 5/Web Api 2?
Tworzę nową ASP. Aplikacja NET (VS2013), wybrano MVC, dodaję API. Uruchamiam "update-package" w Konsoli pakietu, aby uzyskać aktualizacje do najnowszych wersji (MVC 5.1.2, Web Api 5.1.2).
Następnie dodajemy nowe pakiety Ninject.MVC5 i Ninject.Web.WebApi.
dodać te linie do pliku web.config (Ninject chce wersji 5.0, mam 5.1):
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
W App_start/NinjectWebCommon.cs złożyć dodam jedno wiązanie:
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ILogger, NLogLogger>();
}
Następnie dodaję pojedynczy ApiController, z ILogger jako pojedynczym parametrem w konstruktorze, i dodaję ILogger jako parametr do konstruktora HomeController.
To powinno być testowanie?
Czy brakuje niektórych przewodów dla WebApi? Czy to się dzieje "za kulisami"?
Zresztą acessing kontroler api daje mi ten błąd:
An error occurred when trying to create a controller of type 'TestController'. Make sure that the controller has a parameterless public constructor.
i stara się HomeController daje mi to:
Object reference not set to an instance of an object.
Próbowałem to samo, bez aktualizacji do najnowszych pakietów , taki sam problem. Używam programu Ninject od lat z MVC 3 (próbowałem również pakietu Ninject.MVC3) i nie mam pojęcia, dlaczego to nie działa. W WebApi spodziewałem się, że zadzwonię do SetResolver, ale ..
Każda pomoc byłaby przydatna!
Tak dzieje się, gdy pracujesz z Ninject od lat, ale z abstrakcją pomiędzy! Dziękuję bardzo! Aby wyjaśnić, co masz na myśli, mówiąc: "Zarejestruj ILogger raz dla obu", czy rejestruję go raz, a następnie działa zarówno dla MVC, jak i WebApi? Przynajmniej to, co się wydarzyło. –
@Remo Gloor: Twoja odpowiedź zawiera błąd składni. Dodaj "()" po "kernel.Bind". Tak więc pełny kod odpowiedzi będzie następujący: 'kernel.Bind () .To ();'. Zmęczyłem się ulepszaniem tej odpowiedzi, ale najwyraźniej recenzenci nie znaleźli nic przydatnego w korygowaniu błędu składni !!! –