配置Ninject以返回结果列表

我正在使用Ninject解决依赖关系,它一直在游泳,直到现在。 在这个例子中,我实际上需要一个基于存储在App.config中的数据初始化的对象列表。

但是,Ninject不断返回一个空列表。 下面的代码段是我尝试过的一个例子。 我已经为一些上下文包含了类层次结构的构造函数。

public ServiceSchedulerBuilder(IList textExportServices) { _textExportService = textExportServices; } public TextExportService(IHotFolderManager hotFolder) { _hotFolder = hotFolder; } public HotFolderManager(string baseFolderPath, string defaultFileSearchPattern) { //Some IO } //In a Ninject AppModule... Kernel.Bind<IList>().ToMethod(ctx => { var services = new List(); foreach (var device in GetDevicesByEnvironment()) { var service = ctx.Kernel.Get(new ConstructorArgument("hotFolder", ctx.Kernel.Get( new ConstructorArgument("baseFolderPath", device.Path), new ConstructorArgument("defaultFileSearchPattern", "*.jmf")))); services.Add(service); } return services; }); 

我怀疑这一切都源于我没有为ITextExportService本身注册明确的绑定。 但由于实现将依赖于来自App.config的数据,我无法理解如何注册它而不是每次当我要求该类型的列表时都接收相同的实例。

相关: Ninject在Kernel.Get和Constructor Injection之间的不同行为 – >在执行kernel.Get>并解析ctor的IList参数时,ninject的行为方式不匹配。

所以这里:

ninject的多次注射function在这里优先考虑。 每当ninject遇到IEnumerableIListT[] (但AFAIR而不是ICollection )的请求时,它会将其转换为请求以解析T的所有绑定(无条件或匹配条件) 。

尝试以下方法:

 public interface INoMultiBindingList : IList { } public class NoMultiBindingList : List, INoMultiBindingList { } 

有:

sbb public ServiceSchedulerBuilder(INoMultiBindingList textExportServices){textExportService = textExportServices;
}

 Kernel.Bind>().ToMethod(ctx => { var services = new NoMultiBindingList(); foreach (var device in GetDevicesByEnvironment()) { var service = ctx.Kernel.Get(new ConstructorArgument("hotFolder", ctx.Kernel.Get( new ConstructorArgument("baseFolderPath", device.Path), new ConstructorArgument("defaultFileSearchPattern", "*.jmf")))); services.Add(service); } return services; });