Comment lier la propriété IDictionary à Ninject?

J’ai un cours:

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

J’ai plusieurs implémentations de l’interface IMyInterface qui ont leurs propres dépendances injectées. Chaque implémentation doit avoir une clé différente.

Comment lier une telle propriété en utilisant Ninject?

Je suppose que c’est une liste fixe. Le moyen le plus simple serait avec un fournisseur:

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

Vous pouvez enregistrer le fournisseur sur votre kernel de la manière suivante:

  kernel.Bind>().ToProvider(); 

puis le [Inject] pour la propriété utilisera le fournisseur pour créer le dictionnaire.

IMyInterface la clé peut être récupérée / générée / calculée à partir de IMyInterface par exemple à partir d’une propriété Name, il existe une solution simple.

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

Sinon, la solution de ryber est probablement la solution la plus simple.