Castle Windsor中文文档 - 如何解析依赖
如何解析依赖
Windsor的组件很少独立。毕竟,Windsor的主要任务之一是连接和管理依赖。当一个组件有一些依赖时,Windsor会经过几个步骤来解析它们。
依赖解析器(Dependency Resolver)
Windsor使用依赖解析器(实现IDependencyResolver接口的类型)来解析你的组件的依赖。默认依赖解析器(DefaultDependencyResolver类)查找以下位置以解决依赖。
创建上下文(Creation Context)
首先,依赖解析器请求CreationContext解析依赖。CreationContext尝试首先按名称解析依赖项,然后通过使用内联提供的依赖项来解析依赖。这意味着,它来自以下任何一个:
- Arguments passed to
Resolve:container.Resolve<IFoo>(new Arguments(new { inlineDependency = "its value" })); - Arguments passed via
DynamicParametersmethod of fluent registration API.
其他来源: 请注意Typed Factory Facility转发传递给工厂方法的参数,将它作为内联参数。
处理器(Handler)
如果内联参数不能满足依赖关系,解析器会询问处理器是否可以满足它。处理程序尝试首先按名称解析依赖项,然后按类型。该值来自ComponentModel的CustomDependencies集合,这通常意味着参数传递给DependsOn方法。
kernel.Register(Component.For<ClassWithArguments>()
.DependsOn(
Property.ForKey<string>().Eq("typed"),
Property.ForKey<int>().Eq(2)
)
);
子解析器
如果以前的地方不能解析依赖,解析器将轮询它的每个子解析器(ISubDependencyResolver),如果他们可以提供依赖。
核心
当以上都不能解析的依赖容器将尝试自己做。根据依赖关系的类型,它将尝试执行以下操作:
- 对于参数依赖,它将检查
ComponentModel的Parameters集合来匹配依赖。这些包括从XML传递的参数或通过Parameters流利API方法。 - 对于服务重写依赖,它将尝试解析与指定的键匹配的组件。
- 对于服务依赖,它将尝试解析任何匹配指定服务的组件。
如果以上都不行,就会抛出DependencyResolverException。

浙公网安备 33010602011771号