如何在Ninject中列出所有已注册的IBindings?

Rob*_*hey 6 ninject

我看到了枚举给定服务(类型)的绑定列表的方法,但是我找不到一个方法返回已加载模块中绑定的所有内容的列表.我正在寻找类似的东西Kernel::IEnumerable<IBinding> GetAllRegisteredBindings()

这存在吗?如果没有,我可以建立一个可以做到的扩展吗?我需要能够使用服务类型来获取绑定...

dav*_*ben 5

我查看了代码,没有找到请求所有绑定的方法。如果您愿意修改它并使用修改后的代码,您可以执行以下操作:

在 IKernel.cs 中添加:

    /// <summary>
    /// Gets all registered bindings
    /// </summary>
    IEnumerable<IBinding> GetBindings();
Run Code Online (Sandbox Code Playgroud)

在 KernelBase.cs 中添加:

    /// <summary>
    /// Gets all registered bindings
    /// </summary>
    public virtual IEnumerable<IBinding> GetBindings()
    {
        return _bindings.SelectMany( kvp => kvp.Value );
    }
Run Code Online (Sandbox Code Playgroud)

并重新编译。

使用:

    var bindings = Kernel.GetBindings();
    bindings.ForEach( b => logger.DebugFormat( "Binding: {0} -> {1}", b.Service, b.Target ) );
Run Code Online (Sandbox Code Playgroud)