我有一個類:如何將IDictionary屬性與Ninject綁定?
public class MyClass
{
[Inject]
public IDictionary<string, IMyInterface> MyDictionary { get; set; }
}
我有IMyInterface
界面的實現具有自己的依賴注入。每個實現應該有不同的關鍵。
如何使用Ninject綁定這樣的屬性?
我有一個類:如何將IDictionary屬性與Ninject綁定?
public class MyClass
{
[Inject]
public IDictionary<string, IMyInterface> MyDictionary { get; set; }
}
我有IMyInterface
界面的實現具有自己的依賴注入。每個實現應該有不同的關鍵。
如何使用Ninject綁定這樣的屬性?
我認爲這是一個固定的列表。最簡單的方法是用供應商:
public class MyProvider : IProvider
{
public object Create(IContext context)
{
return new Dictionary<string, IMyInterface>{
{"alpha", context.Kernel.Get<ImpClassOne>()},
{"beta", context.Kernel.Get<ImplClassTwo>()}
}
}
public Type Type
{
get { return typeof(IDictionary<string, IMyInterface>); }
}
}
您可以將供應商註冊到內核,如:
kernel.Bind<IDictionary<string, IMyInterface>>().ToProvider<MyProvider>();
,然後該屬性的[進樣]將使用提供商創建字典。
如果密鑰可以以某種方式從IMyInterface
例如IMyInterface
檢索/生成/計算。從名稱屬性,然後有一個簡單的解決方案。
public class DictionaryProvider : Provider<IDictionary<string, IMyInterface>>
{
private IEmumerable<IMyInterface> instances;
public DictionaryProvider(IEmumerable<IMyInterface> instances>)
{
this.instances = instances;
}
protected override IDictionary<string, IMyInterface> CreateInstance(IContext context)
{
return this.instances.ToDictionary(i => i.Name);
}
}
否則ryber的解決方案可能是最簡單的方法。
謝謝,仍然在學習Ninject,但並不知道提供者。 –