1

我开始在我的项目中使用 Ninject,以自动绑定抽象类的所有子类。对此的绑定是——既好又简单——如下:

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

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

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

4

1 回答 1

7

将 a 放在.IncludingNonPublicTypes()the 之前.SelectAllClasses(),您的绑定也适用于内部类。

另请参阅此问题:Cannot get Ninject.Extensions.Conventions to work

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

于 2013-10-11T12:20:03.623 回答