如何将IDictionary属性绑定到Ninject?

我上课了:

public class MyClass { [Inject] public IDictionary MyDictionary { get; set; } } 

我有几个IMyInterface接口的IMyInterface ,它们注入了自己的依赖项。 每个实现应该有一个不同的密钥。

如何使用Ninject绑定这样的属性?

我认为这是一个固定的清单。 最简单的方法是提供者:

  public class MyProvider : IProvider { public object Create(IContext context) { return new Dictionary{ {"alpha", context.Kernel.Get()}, {"beta", context.Kernel.Get()} } } public Type Type { get { return typeof(IDictionary); } } } 

您可以将提供程序注册到您的内核,如:

  kernel.Bind>().ToProvider(); 

然后属性的[Inject]将使用提供程序来创建字典。

如果可以以某种方式从IMyInterface检索/生成/计算密钥,例如从Name属性,那么有一个简单的解决方案。

 public class DictionaryProvider : Provider> { private IEmumerable instances; public DictionaryProvider(IEmumerable instances>) { this.instances = instances; } protected override IDictionary CreateInstance(IContext context) { return this.instances.ToDictionary(i => i.Name); } } 

否则,莱伯的解决方案可能是最简单的方法。