摘要:在Castle IOC容器实践之TypedFactory Facility(一)里面大家都已经知道了如何去使用TypedFactory Facility,也已经体会到它的方便之处了,为了更好的使用它,本篇我们对TypedFactory Facility的原理做一些简单的分析。

 

主要内容

TypedFactory Facility原理分析

……

 

TypedFactory Facility中,有一个FactoryEntry类,这个类与我们平时项目开发中的实体类有一些类似,它用来记录工厂的相关信息,包括工厂的ID,工厂的接口,创建方法和销毁方法。这个类实现如下:

Castle IOC容器实践之TypedFactory Facility(二)public class FactoryEntry
}

TypedFactoryFacility同样是继承于AbstractFacility,关于Facility的继承关系我在前面的文章中已经说过了。TypedFactory Facility在初始化的时候首先会获取工厂的类型,通过SubSystem来得到:

Castle IOC容器实践之TypedFactory Facility(二)protected override void Init()
}

然后再创建一个FactoryEntry实例,记录了工厂的信息,放在了ComponentModel的扩展属性ExtendedProperties中,设置ComponentModel的生命周期为Singleton

Castle IOC容器实践之TypedFactory Facility(二)public void AddTypedFactoryEntry( FactoryEntry entry )
}

在容器中加入一个工厂接口的拦截器FactoryInterceptor,当从容器中获取工厂时,会被拦截器拦截,拦截器的实现如下:

Castle IOC容器实践之TypedFactory Facility(二)[Transient]
Castle IOC容器实践之TypedFactory Facility(二)
Castle IOC容器实践之TypedFactory Facility(二)
public class FactoryInterceptor : IMethodInterceptor, IOnBehalfAware
}

还有一点需要我们注意的是在上面实例化ComponentModel的时候用到了一个Empty类,这个类是一个空类,没有任何实现:

Castle IOC容器实践之TypedFactory Facility(二)public class Empty
}

在实例化ComponentModel时需要传入的几个参数是:

Castle IOC容器实践之TypedFactory Facility(二)public ComponentModel(String name, Type service, Type implementation)
}

即这里用一个空的类型来代替实现了的类型。

 

上篇:Castle IOC容器实践之TypedFactory Facility(一)

 

参考资料

Castle的官方网站http://www.castleproject.org

相关文章: