Ninject Conventions是否仅适用于公共课程?

我开始在我的项目中使用Ninject来自动绑定抽象类的所有子类。 对此的绑定是 – 简单易行 – 如下:

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

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

我可以想象这是一些安全function,以防止绑定从内部泄漏到外部。 但我可以为这些类添加显式绑定。 因此,我的问题是:有人知道这是否是预期的行为? 有没有办法解决这个问题,除了让我的所有课程都公开?

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

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

我不认为这是关于安全的。 我想这是关于设计而言可能与性能有关:仅从公共类型中选择比从所有类型中选择花费更少的时间。