Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Ninject检索更多通用绑定_C#_Ninject - Fatal编程技术网

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!这不是官方的方法!我只是复制源代码。谢谢好;)没问题:)