Давайте предположим, что у меня есть следующий класс:Инъекционной коллекции с Ninject
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
, тем не менее, впрыскивается очень хорошо.
Вы можете также их закачиваемой как 'IEnumerable <>' или как 'IList <>' (не как 'ICollection'). Однако я бы не рекомендовал использовать 'IEnumerable <>', потому что это может привести к непреднамеренным побочным эффектам, если вы перечислите их позже (а не @ctor). – BatteryBackupUnit