C# 从Ninject检索更多通用绑定
假设我有以下类型C# 从Ninject检索更多通用绑定,c#,ninject,C#,Ninject,假设我有以下类型 public interface IFoo{} public class Foo1 : IFoo{} public class Foo2 : IFoo{} 这些都是和Ninject一样的 Bind<Foo1>().ToSelf(); Bind<Foo2>().ToSelf(); Bind().ToSelf(); Bind().ToSelf(); 有没有一种方法可以从内核中获取IFoo的所有实例?调用kernel.GetAll()返回一个空结果。我无
public interface IFoo{}
public class Foo1 : IFoo{}
public class Foo2 : IFoo{}
这些都是和Ninject一样的
Bind<Foo1>().ToSelf();
Bind<Foo2>().ToSelf();
Bind().ToSelf();
Bind().ToSelf();
有没有一种方法可以从内核中获取IFoo的所有实例?调用kernel.GetAll()
返回一个空结果。我无法将IFoo与Foo等绑定在一起
编辑
我很高兴能够获取所有绑定,并通过反射手动检查它们,但看不到任何明显的内容是的,您可以
请阅读ninject中的多重注射
在您的情况下,可能是:
Bind<IFoo>().To<Foo1>();
Bind<IFoo>().To<Foo2>();
Bind<Foo1>().ToSelf();
Bind<Foo2>().ToSelf();
Bind().To();
绑定()到();
Bind().ToSelf();
Bind().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();
}
publicstatictype[]GetBindings(此IKernel内核)
{
return((多映射)typeof(KernelBase)
.GetField(“bindings”,BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(kernel)).Select(x=>x.Key).ToArray();
}
谢谢,但我无法绑定.to();这就是问题所在。具体来说,我有一个预构建的绑定负载,我无法在原位合理地修改它,我需要能够从绑定中提取到。是的,但这也需要一个类型作为参数(即使问题中的代码没有)Doh!这不是官方的方法!我只是复制源代码。谢谢好;)没问题:)