如何迭代 Ninject StandardKernel 的已配置绑定以进行调试?

Posted

技术标签:

【中文标题】如何迭代 Ninject StandardKernel 的已配置绑定以进行调试?【英文标题】:How to iterate over Ninject StandardKernel's configured bindings to debug? 【发布时间】:2013-03-31 07:38:00 【问题描述】:

在我的 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]等...

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

【问题讨论】:

你能解决这个问题吗?我也有同样的问题,可以吗?我能找到的最好的是:***.com/questions/4680303/… @user3141326 你的链接是迄今为止我见过的最好的东西。为了回答你的问题,我还没有找到解决这个问题的方法。 【参考方案1】:

在您的 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)
                
            
                      
    

【讨论】:

以上是关于如何迭代 Ninject StandardKernel 的已配置绑定以进行调试?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Ninject 与 HttpClient 一起使用

如何在 asp.net Web 窗体上实现 Ninject 或 DI?

验证:如何使用Ninject注入模型状态包装器?

如何在c#类库中使用Ninject

如何在Ninject中使用AutoMApper.5.2.0?

如何在Azure Web作业中的调用范围绑定中配置Ninject?