是否可以使用工厂方法使用流畅的nhibernate创建类的实例?

时间:2011-01-18 21:19:04

标签: c# fluent-nhibernate

例如,我有一组域类。这些类实现了一个通用接口。界面是公共的,但类本身是内部的。可以使用提供的公共工厂创建这些类的实例。此外,每个类实例都使用每层一个表的技术进行持久化。

如何使用Fluent NHibernate?任何帮助将不胜感激。

谢谢, 布雷克

2 个答案:

答案 0 :(得分:2)

这是比FNH更具体的NHibernate,但就我所见,你有两个选择。

  1. 实施IInterceptor.Instantiate(string entityName, EntityMode entityMode, object id) - 您还必须将所述拦截器与您开始的任何NHibernate会话相关联。

  2. 根据http://fabiomaulo.blogspot.com/2008/11/entities-behavior-injection.html,子类ReflectionOptimizer' and implement the CreateInstance()`方法(对于要为其构建工厂的每种类型,需要一个)。有些配置和布线我还不完全理解,我怀疑这基本上是方法#1的过度杀伤版本。

  3. 如果你想为你的域类注入持久字段和属性,我不确定是否有办法做到这一点,因为这是一个非常重要的事情要概括。

答案 1 :(得分:1)

您还可以利用NHibernate 2.0+中的事件系统。 Load事件允许您为NHibernate创建对象。您所要做的就是创建ILoadEventListener的实现,将其添加到ISessionFactoryISession的事件侦听器,并获利!

 using NHibernate.Event.Default

 public class MyCreatorListener : DefaultLoadEventListener
 {
   // this is the single method defined by the LoadEventListener interface
   public override void OnLoad(LoadEvent theEvent, LoadType loadType)
   {
     if(null == theEvent.InstanceToLoad) // Not null if user supplied object
     {
       theEvent.InstanceToLoad = MyFactory.Create(loadType); // Or whatever.
     }
   }
 }