如何迭代 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 的已配置绑定以进行调试?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asp.net Web 窗体上实现 Ninject 或 DI?