从Ninject检索更通用的绑定

时间:2015-06-02 09:14:44

标签: c# ninject

想象一下,我有以下类型

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

与Ninject绑定为

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

有没有办法从内核中获取IFoo的所有实例?调用kernel.GetAll<IFoo>()会返回一个空结果。我无法将IFoo绑定到Foo等

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

1 个答案:

答案 0 :(得分:0)

是的,你可以。

请阅读ninject中的多次注射

Multi injection

在你的情况下可能是:

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();
    }

source