Получите все конкретные типы от ninject - PullRequest
5 голосов
/ 27 октября 2011

Есть ли способ с помощью ninject получить конкретные типы из привязки?Я не хочу создавать экземпляры реализаций, просто получите тип.

Я хочу сделать что-то вроде этого

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

Мой Kernel это просто StandardKernel.

Я хочу со временем задуматься против этих типов.

1 Ответ

4 голосов
/ 27 октября 2011

Единственный способ - получить все экземпляры, используя kernel.GetAll<IController>(). Ninject не имеет привязки набора привязок. Реализация определяется, когда экземпляры разрешаются путем внедрения или получения вызовов. Это потому, что Ninject допускает условные и неявные привязки.

Если вы настроили приложение MVC3, вы на самом деле не регистрируете свои контроллеры, поскольку Ninject будет определять, какой контроллер загружать и что вводить в него. Это достигается путем ленивого создания неявного связывания.

Самое близкое, что вы можете получить, это расширить StandardKernel и получить доступ к защищенному набору привязок и найти все привязки, которые не являются условными. Если у вас есть все безусловные привязки, вы можете разорвать привязку, но я точно не помню, как они могут быть скрыты за классом StandardProvider.

Что вы делаете, что вам нужно знать точную конфигурацию привязки для конкретного интерфейса?

...