如何将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); } }
否则,莱伯的解决方案可能是最简单的方法。