使用Ninject注入集合

本文关键字:集合 注入 Ninject 使用 | 更新日期: 2023-09-27 18:00:38

假设我有以下类:

public class AsyncEntityManager<E> : EntityManager<E>, IAsyncEntityManager<E>
      where E : IPersistableEntity
{
     public AsyncEntityManager(ICollection<IPersistenceStrategy<E>> strategies, ILogger logger) : base(strategies, logger) { }
}

在这种情况下,我如何注入集合?

这就是我尝试的:

internal class PersistenceModule : ApplicationModule
{
     public override void Load()
     {
          Kernel.Bind<ICollection<IPersistenceStrategy<User>>>().ToMethod(c => new IPersistenceStrategy<User>[] {
               (IPersistenceStrategy<User>)c.Kernel.GetService(typeof(DynamoDBStrategy<User>))
          });
          Kernel.Bind<IAsyncEntityManager<User>>().To<AsyncEntityManager<User>>();
     }
}

但是,该集合没有注入任何元素。它是而不是null,但其中根本没有元素。然而,ILoggeer的注入很好。

使用Ninject注入集合

对于任何感兴趣的人来说,Ninject似乎可以处理到同一接口的多个绑定:

Kernel.Bind<IPersistenceStrategy<User>>().To<DynamoDBStrategy<User>>();
Kernel.Bind<IPersistenceStrategy<User>>().To<SQLServerStrategy<User>>();

这将被注入为IPersistenceStrategy<User>[],然后被广播到ICollection<IPersistenceStrategy<User>>