Używam ninject mvc3 plugin z moją aplikacją web api. Mam wiążący, który wygląda tak:Wiązanie pojedynczej wiązki nie działa zgodnie z przeznaczeniem
kernel.Bind<IFoo>().To<Foo>().InSingletonScope();
To jest moja interpretacja, że kernal stworzy dokładnie jedną instancję Foo
i używać go w odpowiedni sposób. Umieszczając punkt przerwania w konstruktorze Foo
, wyraźnie widzę, że jest on wywoływany raz na żądanie i nie mogę wyjaśnić, dlaczego.
Przypuszczam, że w jakiś sposób powstaje nowe jądro dla każdego żądania, ale tak się nie dzieje, ponieważ metoda CreateKernel
, która ustawia globalny program rozstrzygający zależności, jest uruchamiana tylko raz w czasie życia aplikacji.
używam jakiś kod zaczerpnięty z this post aby ninject grać ładny z MVC 4. Ze względu na zmiany ramowych, musiałem dokonać dodatkowego opakowania, które przypisać do GlobalConfiguration.Configuration.DependencyResolver
:
public class NinjectResolver : NinjectScope, IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectResolver(IKernel kernel)
: base(kernel)
{
_kernel = kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectScope(_kernel.BeginBlock());
}
}
Co robię źle?
Może nie związane Problem captncraiga, ale związany z tytułem. Miałem ten sam problem i okazało się, że przypadkowo wstrzyknąłem implementację do jednego z moich obiektów, a nie interfejsu. Tak więc w konstruktorze przypadkowo umieściłem Foo zamiast IFoo. Mam nadzieję, że to komuś pomaga ... –