NHibernate实现延迟加载的主要结构:
BuildSessionFactory的时候:
1. 根据proxyfactory.factory_class的配置创建IProxyFactoryFactory对象
2. 如果use_proxy_validator配置为true(默认为true),加载实体映射元数据之后,对需要代理的 实体使用 IProxyFactoryFactory的ProxyValidator进行验证(例如要求实体有默认构造器、方法属性必 须为virtual类型等)
3. 为需要代理的实体类型创建IProxyFactory,并调用IProxyFactory对象的PostInstantiate方法
对每一个需要代理的实体类型都会创建一个IProxyFactory对象并缓存,创建代理对象则通过 IProxyFactory的GetProxy方法完成
AbstractProxyFactory主要是实现PostInstantiate方法,这个方法主要是将创建代理对象所需的信息 记录下来,例如 EntityName(字符串的实体类名)、PersistentClass(代理对象的System.Type)、 Interfaces(代理对象需要额外实现的接口,例如INHibernateProxy),其他几个记录的属性则为单主键 和组合主键id的get、set方法
ProxyFactory则主要实现GetProxy方法,使用Castle或者LinFu等动态代理库以及上述信息创建代理对 象
时间: 2024-12-03 01:33:53