Jedynym sposobem jest uzyskanie wszystkich wystąpień za pomocą kernel.GetAll<IController>()
. Ninject nie ma ustawionego odwzorowania wiązania. Implementacja jest określana, gdy instancje są rozwiązywane przez wstrzyknięcie lub otrzymają wywołania. Dzieje się tak, ponieważ Ninject zezwala na wiązania warunkowe i niejawne.
Jeśli skonfigurujesz aplikację MVC3, nie zarejestrujesz w rzeczywistości kontrolerów, ponieważ program Ninject określi, który kontroler ma zostać załadowany, a który wtryska. Robi to leniwie tworząc niejawne powiązanie.
Najbliższym wyjściem jest rozszerzenie StandardKernel
i uzyskanie dostępu do chronionego zestawu powiązań i znalezienie wszystkich powiązań, które nie są warunkowe. Gdy masz wszystkie nie-warunkowe wiązania, możesz być w stanie rozdzielić wiązanie, ale nie pamiętam dokładnie, ponieważ mogą one być ukryte za klasą StandardProvider
.
Co robisz, że musisz znać dokładną konfigurację wiązania dla konkretnego interfejsu?
Zdaję sobie sprawę, że to jest na zawsze, ale tylko jedno miejsce, w którym potrzebuję tego: Buduję ServiceHost oparty na Ninject dla WCF, aby Ninject zbudował dla mnie instancje usługi. Muszę podać konstruktorowi ServiceHost typ konkretnej implementacji usługi, a nie interfejsu usługi. –