Ninject 约定是否仅适用于公共类?

本文关键字:适用于 约定 是否 Ninject | 更新日期: 2023-09-27 18:35:01

我开始在我的项目中使用 Ninject,以自动绑定抽象类的所有子类。这个绑定是 - 很好和容易 - 如下:

kernel.Bind(x => x.FromThisAssembly()
    .SelectAllClasses().
    .InheritedFrom<AbstractGenerator>()
    .BindBase());

但是,我发现这不起作用。经过一些实验,我发现这不起作用的原因是我所有的实现(和抽象类(都被标记为内部

我可以想象这是一些安全功能,以防止绑定将内部泄漏到外部。但我可以为这些类添加显式绑定。因此,我的问题是:有人知道这是否是预期行为吗?除了公开我的所有课程之外,还有其他方法可以解决这个问题吗?

Ninject 约定是否仅适用于公共类?

.SelectAllClasses()之前放一个.IncludingNonPublicTypes(),你的绑定也适用于内部类。

另请参阅此问题:无法使 Ninject.Extensions.Conventions 正常工作

我不认为这与安全有关。我想这与设计有关,也许与性能有关:仅从公共类型中进行选择比从所有类型中进行选择花费的时间更少。