2011-10-27 20 views
5

Czy istnieje sposób na ninject, aby uzyskać konkretne typy z wiązania? Nie chcę tworzyć instancji implementacji, po prostu znajdź typ.Pobierz wszystkie typy betonu od zera

chcę zrobić coś jak to

Type[] concreteTypes = Kernel.GetBindings(typeof(IController)). 
    GetImplementingTypes(); 

My Kernel tylko StandardKernel.

Chcę ostatecznie zastanowić się nad tymi typami.

Odpowiedz

4

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?

+0

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. –

Powiązane problemy