如何迭代Ninject StandardKernel配置的绑定到调试?

Jef*_*eff 5 ninject ioc-container autowired

在我的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]
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要进行健全性检查以查看我已成功绑定到我的服务的类型.我无法访问绑定类型类型名称.相反的[BindingTarget],我倒要看看[Mercedes],[Ferrari]等...

有没有好的和/或常见的方法来做到这一点?

ale*_*sio 0

在 IocKernel 中,我只需添加一个方法来获取给定类型 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)
                }
            }
        }              
    }
Run Code Online (Sandbox Code Playgroud)