Frage

Ich möchte anstelle eines Singleton Abfangjäger Prototyp Abfangjäger verwenden, um jede Sitzung eine neue Abfangjäger Instanz erhalten würde.

Ich schaute in die HibernateTransactionManager Klasse und ich denke, „EntityInterceptorObjectName“ und „Object“ sind die Eigenschaften Ich habe eingestellt werden.

Während EntityInterceptorObjectName ziemlich offensichtlich ist, Ich habe keine Ahnung, wie die Object verweisen , wenn es die „Mutter der ObjectFactories“ ist, z.B. das gleiche Object die die AppContext / die HibernateTransactionManager erstellt.

Der relevante Teil der config:

   <object id="HibernateTransactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate20">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="SessionFactory" ref="SessionFactory"/>
    <!-- the name of my non-Singleton EntityInterceptor-->
     <property name="EntityInterceptorObjectName" value="MyPrototypeEntityInterceptor" />
    <!-- What should I put as ref here? -->
    <property name="ObjectFactory" ref="" />
  </object>

  <object id="MyPrototypeEntityInterceptor" type="Hib.EntityInterceptor, Hib.Interceptors" singleton="false">
  </object>  
War es hilfreich?

Lösung

Wie ich es verstehe können Sie Ihre eigene Implementierung von IObjectFactory verwenden, um die Objekte erstellen Sie den Vornamen nach wollen. Wenn Sie die Objekte in der Lage verwenden möchten definiert in Ihrem Frühlings-Application können Sie auch IObjectFactoryAware implementieren, um Ihre Object zu Ihrem Frühjahr IoC Container zu verbinden.

Dies sollte Ihnen ermöglichen, zu tun, was Sie wollen. Erstellen Sie neue Instanzen jeder Klasse und füllen ihre Eigenschaften mit Objekten aus dem IoC-Container (zB Session, ...).

public class MyObjectFactoryAware : IObjectFactoryAware, IObjectFactory
{
   //this property will be set by the IoC container
   ObjectFactory {get; set;}

   //IObjectFactory implementation
   virtual object GetObject(string objectName)
   {
      MyEntityInterceptor interceptor = new MyEntityInterceptor();
      interceptor.SessionFactory = this.ObjectFactory.getObject("SessionFactory");
      return interceptor;

      //or of course if you just need it for wireing simply:
      //return this.ObjectFactory.getObject(objectName);
   }   
}

und die Abbildung:

<object id="HibernateTransactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate20">
  <property name="DbProvider" ref="DbProvider"/>
  <property name="SessionFactory" ref="SessionFactory"/>
  <!-- the name of my non-Singleton EntityInterceptor-->
  <property name="EntityInterceptorObjectName" value="MyPrototypeEntityInterceptor" />
  <!-- and the name of the objectFactory -->
  <property name="ObjectFactory" ref="MyObjectFactory" />
</object>

<object id="MyObjectFactory" type="Hib.MyObjectFactoryAware, Hib.Interceptors">
</object>

<object id="MyPrototypeEntityInterceptor" type="Hib.EntityInterceptor, Hib.Interceptors" singleton="false">
</object>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top