我ninject.extensions.conventions
用来绑定给定程序集中的所有实现,并用程序集名称标记它们作为绑定的元数据。我可以使用 Get 将这些项目拉回并提供 func 作为标准。
我想知道的是这个函数是否也适用于所有已解决的孩子?我担心的是,虽然我的逻辑现在有效,但如果我添加更多满足任何孩子不止一次的绑定,ninject 会抛出。
代码示例:
_kernel.Bind(binder => binder.From(new[] { pathToAssembly })
.SelectAllClasses()
.BindAllInterfaces()
.Configure(binding =>
binding.WithMetadata("context",
assemblyName)));
_kernel.Get<IRootDependency>
(metadata => metadata.Get<IRootDependency>("context") ==
assemblyName);
// Bound from convention above.
RootDependencyBase: IRootDependency
{
Public RootDependencyBase(IChildDependency Child) {};
}
// Bound using the convention above with the same MetaData Tag.
ChildDependencyFromSameAssembly : IChildDependency {}
// Bound using a differing convention and does not have the same MetaData tag.
ChildDependencyFromOtherAssembly : IChildDependency {}
根据上面的示例,我知道 IRootDependency 将根据元数据过滤器解析为正确的绑定。
我正在寻找的是以下事实。
此过滤器不会向下馈送依赖链。IChildDependency 将抛出异常,因为虽然绑定指定了 MetaData,但它没有被查询。