配置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遇到IEnumerable
, IList
或T[]
(但AFAIR而不是ICollection
)的请求时,它会将其转换为请求以解析T的所有绑定(无条件或匹配条件) 。
尝试以下方法:
public interface INoMultiBindingList : IList { } public class NoMultiBindingList : List , INoMultiBindingList { }
有:
sbb public ServiceSchedulerBuilder(INoMultiBindingList textExportServices){textExportService = textExportServices;
}
上述就是C#学习教程:配置Ninject以返回结果列表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
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; });
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1030797.html