从Ninject中检索更通用的绑定

本文关键字:绑定 Ninject 检索 | 更新日期: 2023-09-27 17:52:42

假设我有以下类型

public interface IFoo{}
public class Foo1 : IFoo{}
public class Foo2 : IFoo{}

绑定到Ninject的

Bind<Foo1>().ToSelf();
Bind<Foo2>().ToSelf();

是否有一种方法,我可以从内核获得IFoo的所有实例?调用kernel.GetAll<IFoo>()返回一个空结果。我不能将IFoo绑定到Foo等

编辑我很高兴能够获得所有绑定,并通过反射手动检查它们,但看不到任何明显的

从Ninject中检索更通用的绑定

可以。

请阅读ninject中多次注射

多注

在你的例子中可能是:

Bind<IFoo>().To<Foo1>();
Bind<IFoo>().To<Foo2>();
Bind<Foo1>().ToSelf();
Bind<Foo2>().ToSelf();

如果你想获得所有绑定的列表,你可以尝试使用这个扩展方法:

    public static Type[] GetBindings(this IKernel kernel)
    {
        return ((Multimap<Type, IBinding>)typeof(KernelBase)
            .GetField("bindings", BindingFlags.NonPublic | BindingFlags.Instance)
            .GetValue(kernel)).Select(x => x.Key).ToArray();
    }