Ninject 约定是否仅适用于公共类?
本文关键字:适用于 约定 是否 Ninject | 更新日期: 2023-09-27 18:35:01
我开始在我的项目中使用 Ninject,以自动绑定抽象类的所有子类。这个绑定是 - 很好和容易 - 如下:
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses().
.InheritedFrom<AbstractGenerator>()
.BindBase());
但是,我发现这不起作用。经过一些实验,我发现这不起作用的原因是我所有的实现(和抽象类(都被标记为内部。
我可以想象这是一些安全功能,以防止绑定将内部泄漏到外部。但我可以为这些类添加显式绑定。因此,我的问题是:有人知道这是否是预期行为吗?除了公开我的所有课程之外,还有其他方法可以解决这个问题吗?
在.SelectAllClasses()
之前放一个.IncludingNonPublicTypes()
,你的绑定也适用于内部类。
另请参阅此问题:无法使 Ninject.Extensions.Conventions 正常工作
我不认为这与安全有关。我想这与设计有关,也许与性能有关:仅从公共类型中进行选择比从所有类型中进行选择花费的时间更少。