سؤال

وأود أن استخدام الصواريخ الاعتراضية النموذج بدلا من اعتراضية المفرد لذلك كل دورة سيحصل على سبيل المثال اعتراضية جديدة.

وكنت قد بحثت في فئة HibernateTransactionManager وأعتقد أن "EntityInterceptorObjectName" و "ObjectFactory" هي خصائص لدي لتعيين.

وعلى الرغم EntityInterceptorObjectName هو واضح جدا، على ليس لدي أي فكرة عن كيفية الرجوع إلى ObjectFactory عند انها "أم ObjectFactories"، على سبيل المثال نفس ObjectFactory التي تخلق AppContext / وHibernateTransactionManager.

والجزء ذي الصلة من التكوين:

   <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>  
هل كانت مفيدة؟

المحلول

وكما أفهمها يمكنك استخدام تنفيذ الخاص بك من IObjectFactory خلق الكائنات التي تريد وفقا لاسم معين. إذا كنت تريد أن تكون قادرة على استخدام الكائنات المحددة ضمن بك الربيع ApplicationContext يمكنك أيضا تنفيذ IObjectFactoryAware للاتصال ObjectFactory الخاص بك إلى اللجنة الاولمبية الدولية للحاويات الربيع.

وهذا يجب تمكين لك أن تفعل ما تريد. إنشاء مثيلات جديدة من أي فئة وملء خصائصه مع الكائنات من الحاوية اللجنة الاولمبية الدولية (على سبيل المثال SessionFactory، ...).

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);
   }   
}

وورسم الخرائط:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top