簡體   English   中英

如何將IDictionary屬性綁定到Ninject?

[英]How to bind IDictionary property with Ninject?

我有一節課:

public class MyClass
{
    [Inject]
    public IDictionary<string, IMyInterface> MyDictionary { get; set; }
}

我有幾個IMyInterface接口的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>();

然后屬性的[Inject]將使用提供程序來創建字典。

如果可以以某種方式從IMyInterface檢索/生成/計算密鑰,例如從Name屬性,那么有一個簡單的解決方案。

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);
    }
}

否則,萊伯的解決方案可能是最簡單的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM