Как прокручивать настроенные привязки Ninject StandardKernel для отладки?

93
11


В моем модуле привязки Ninject


public class CarModule : NinjectModule 
{
public override void Load()
{
Kernel.Bind(scanner => scanner.FromThisAssembly().SelectAllClasses()
.InheritedFrom<ICar>().BindAllInterfaces());

foreach (var binding in kernel.GetBindings(typeof(ICar)))
{
Trace.WriteLine(string.Format("[{0}] Service bound to [{1}]",
binding.Service.Name,
binding.Target.GetType().Name));
}

// Output looks like:
//[ICar] Service bound to [BindingTarget]
//[ICar] Service bound to [BindingTarget]
//[ICar] Service bound to [BindingTarget]
}
}


Мне нужна проверка работоспособности, чтобы увидеть типы, которые я успешно привязал к моим услугам. У меня возникли проблемы с доступом к именам типов связанных типов. Вместо [BindingTarget], я хотел бы видеть [Mercedes], [Ferrari] и т.д.


Есть ли хороший и/или общий способ сделать это?

спросил(а) 2013-04-09T05:38:00+04:00 7 лет, 1 месяц назад
1
Решение
84

В вашем IocKernel я просто добавлю метод GetAll экземпляров заданного типа T и вызовет его после загрузки вашего модуля:

    public static class IocKernel
{
private static StandardKernel _kernel;

public static IEnumerable<T> GetAll<T>()
{
return _kernel.GetAll<T>();
}

public static void Initialize(params INinjectModule[] modules)
{
if (_kernel == null)
{
_kernel = new StandardKernel(modules);

List<ICar> bindingsList= _kernel.GetAll<ICar>().ToList();
foreach(ICar binding in bindingsList)
{
Trace.WriteLine(string.Format("Service bound to [{1}]", binding.GetType().Name)
}
}
}
}

ответил(а) 2016-08-12T13:36:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема