Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用工厂方法使用fluent nhibernate创建类的实例?_C#_Fluent Nhibernate - Fatal编程技术网

C# 是否可以使用工厂方法使用fluent nhibernate创建类的实例?

C# 是否可以使用工厂方法使用fluent nhibernate创建类的实例?,c#,fluent-nhibernate,C#,Fluent Nhibernate,例如,我有一组域类。这些类实现了一个公共接口。接口是公共的,但类本身是内部的。这些类的实例可以通过使用提供的公共工厂来创建。此外,每个类实例都使用每个层次结构一个表的技术进行持久化 在这种情况下如何使用Fluent NHibernate?任何帮助都将不胜感激 谢谢, Blake这比FNH更具体,但据我所知,您有两种选择 实现IInterceptor.Instantiate(字符串entityName、EntityMode EntityMode、对象id)-您还必须将所述拦截器与启动的任何NHib

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

在这种情况下如何使用Fluent NHibernate?任何帮助都将不胜感激

谢谢,
Blake

这比FNH更具体,但据我所知,您有两种选择

  • 实现
    IInterceptor.Instantiate(字符串entityName、EntityMode EntityMode、对象id)
    -您还必须将所述拦截器与启动的任何NHibernate会话相关联

  • 根据,子类
    ReflectionOptimizer'并实现
    CreateInstance()`方法(要为其构建工厂的每种类型都需要一个方法)。有一些配置和接线我不完全理解,我怀疑这基本上是方法1的一个滥杀版本


  • 如果您想为域类注入持久化字段和属性,我不确定是否有办法做到这一点,因为这是一件非常重要的事情。您还可以利用NHibernate 2.0+中的事件系统。
    Load
    事件也允许您为NHibernate创建对象。您所要做的就是创建一个
    ILoadEventListener
    的实现,将其添加到
    ISessionFactory
    ISession
    的事件侦听器中,然后就可以了

     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.
         }
       }
     }