伙计我需要我认为是常见的情况,但似乎无法使其发挥作用。我想注册所有实现,以便Ninject在构造函数中检索它们:
public Handler(IEnumerable<IValidation> validations)
{
// NationalIdValidation, PassportValidation, etc. are available here
}
当前注册我没有创建一些绑定但是从代码中查询验证检索没有记录:
Kernel.Bind(scan => scan.FromAssemblyContaining<IValidation>()
.SelectAllClasses()
.InheritedFrom<IValidation>()
.BindAllInterfaces());
答案 0 :(得分:1)
常见错误:
1)这些类实际上并不在约定所涵盖的程序集中
2)实现IValidation
接口的类需要公开或,您需要将IncludingNonPublicTypes()
添加到约定中:
Kernel.Bind(scan => scan.FromAssemblyContaining<IValidation>()
.SelectAllClasses()
.IncludingNonPublicTypes()
.InheritedFrom<IValidation>()
.BindAllInterfaces());
另请注意,在Ninject的旧版本中,此方法称为IncludeNonePublicTypes()
(无,而非非)。
出于调试目的,您还可以实现IBindingGenerator
并更改绑定以使用它。然后在IBindingGenerator
内设置一个断点,以查看实际找到的条件匹配的类。如果找到了必要的类,那么它只能是实现的Bind...
部分的问题。