有一种解决的办法有点违背控制反转原则:类A可以通过实现IObjectFactoryAware 接口 来获取容器的引用,并调用GetObject("B")在每次需要的时候从容器中请求一个(新的)对象B。但这并不是一个很好的解决方案,因为客户代码此时必须要和Spring.NET发生紧耦合。
通过方法注入,我们可以用更优雅的方式解决类似的问题。(摘自Spring.NET中文手册)
Spring.Net 中提供了两个接口,我们使用这两个接口可以让对象了解自己的容器。
一 . IObjectFactoryAware 接口
实现了 Spring.Objects.Factory.IObjectFactoryAware 接口 的对象可以在被容器创建后获取它所在容器的引用。该接口只有一个(只写的)属性:
IObjectFactory ObjectFactory:该属性会在初始化方法(IInitializingObject 的 AfterPropertiesSet 方法,或在对象定义中由 init-method 属性 指定的方法)完成后被赋值。
IObjectFactoryAware 接口 允许对象通过编程方式访问创建它的容器,一般主要用来在编程时获得容器内的其它对象。虽然这种方式在某些情况下(似乎)很有用,但我们应该尽量避免这么做,因为这会导致代码同 Spring.NET 发生紧耦合,并且违反了控制反转原则。
二 . IObjectNameAware 接口
Spring.Objects.Factory.IObjectNameAware 接口 可让对象知道在容器中叫什么名称,如果对象需要知道自己在容器中的名称,可以实现该接口:
string ObjectName:该属性使实现了 IObjectNameAware 接口 的对象能够知道自己在容器中的名称。
此文章展示了它们的用法
http://www.cnblogs.com/cilence/archive/2013/03/12/2955242.html