我使用Castle Windsor作为更专业框架的一部分。弹出的需求之一是能够在基于服务上指定的属性解析服务时选择要使用的实现。
例如,假设:
public class MyService
{
public MyService([Selector("Bar")]SomeDependency foo){......}
}然后,我希望在ISubDependencyResolver中获取SelectorAttribute,获取它的值,并相应地进行解析。
我们已经这样做了,但是使用类型本身的属性(假设是SomeDependency定义上的属性)。这很容易,因为你有一个类型的引用。然而,我在寻找如何获取当前正在解析的参数/属性的引用时遇到了问题,这将使我能够获取该属性。
有人愿意分享一些见解吗?
谢谢!
发布于 2010-07-06 04:47:22
这实际上是一个内联定义的服务覆盖,因此我会将其视为内联服务覆盖。我将使用组件模型贡献器(IContributeComponentModelConstruction),而不是尝试在ISubDependencyResolver中实现它。
问题是,要做到这一点,除了用你自己的ConstructorDependenciesModelInspector替换默认的SelectorAttribute之外,我看不到任何其他的方法(它将非常类似,但它也会读取这个SelectorAttribute,当找到它时,它会创建一个带有DependencyType.ServiceOverride的DependencyModel。
要替换ConstructorDependenciesModelInspector,请使用container.Kernel.ComponentModelBuilder。
https://stackoverflow.com/questions/3181493
复制相似问题