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

时间:2013-10-11 11:55:21

标签: c# ninject ninject-extensions

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

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

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

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

1 个答案:

答案 0 :(得分:7)

.IncludingNonPublicTypes()之前添加.SelectAllClasses(),您的绑定也适用于内部类。

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

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