我正在使用Castle Windsor作为更专业框架的一部分。弹出的一个要求是能够根据服务上指定的属性选择在解析服务时使用的实现。
例如,假设:
public class MyService
{
public MyService([Selector("Bar")]SomeDependency foo){......}
}
然后我想在ISubDependencyResolver中获取SelectorAttribute,获取其值,并相应地解析。
我们已经这样做了,但是在类型本身上有属性(比如SomeDependency定义的一个属性)。这很容易,因为你有一个类型的参考。但是,我在找到如何获取当前正在解析的参数/属性的引用时遇到问题,这将让我获取该属性。
有人愿意分享一些见解吗?
谢谢!
答案 0 :(得分:1)
IMO这实际上是一个内联定义的服务覆盖,所以我会这样对待它。我没有尝试在ISubDependencyResolver
中实现此功能,而是使用组件模型贡献者(IContributeComponentModelConstruction
)。
问题是,要做到这一点,我没有看到任何其他方法,而不是用你自己的替换默认的ConstructorDependenciesModelInspector
(它会非常相似,但它也会读到这个SelectorAttribute
,当找到它时会使用DependencyModel
创建DependencyType.ServiceOverride
。
要替换ConstructorDependenciesModelInspector
,请使用container.Kernel.ComponentModelBuilder
。