2010-02-10 96 views
1

我遇到了一個問題,我試圖通過ProxyFactoryObject在spring.net中調用一個對象。現在我在工廠調用的對象有一個構造函數,它通過構造函數注入來引用另一個對象。當我從C#代碼調用代理從代理返回正確的目標對象,但它應該被設置爲通過初始化構造函數調用某些內容的項目是空的。現在我不確定爲什麼會發生這種情況。Spring.net將ProxyFactoryObject與使用構造函數注入的對象一起使用

我的app.config對象部分低於:

<objects xmlns="http://www.springframework.net"> 

     <object name="MyMovieLister" id="MyMovieLister" type="SpringTestProgram.Classes.MovieLister, SpringTestProgram" singleton="false"> 
      <!-- using cstor injection... --> 
      <constructor-arg index="0" ref="MyMovieFinder"/> 
      <constructor-arg index="1" value="2"/> 
     </object> 

     <object name="MyMovieFinder" id="MyMovieFinder" type="SpringTestProgram.Classes.MovieFinder, SpringTestProgram" singleton="false"/> 

     <object id="MyBeforeAdvisor" 
       type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop"> 

      <property name="Advice"> 
       <object id="myBeforeAdvice" 
       type="SpringTestProgram.Classes.LoggingAdvice, SpringTestProgram"/> 
      </property> 

      <property name="MappedNames"> 
       <list> 
        <value>FindAll</value> 
       </list> 
      </property> 
     </object> 


     <object name="MovieWorkerProxy" type="Spring.Aop.Framework.ProxyFactoryObject, Spring.Aop"> 

      <property name="Target" ref="MyMovieLister" /> 

      <!--<property name="TargetSource"> 
       <object type="Spring.Aop.Target.PrototypeTargetSource, Spring.Aop"> 
        <property name="TargetObjectName" value="MyMovieLister" /> 
       </object> 
      </property>--> 

      <!--<property name="ObjectNames"> 
       <list> 
        <value>MyMovieLister</value> 
       </list> 
      </property>--> 

      <property name="interceptorNames"> 
       <list> 
        <value>MyBeforeAdvisor</value> 
       </list> 
      </property> 
     </object>  

    </objects> 

而下面是我必須把這個C#代碼:

 IApplicationContext ctx = ContextRegistry.GetContext(); 
     MovieLister myMovieLister = ctx.GetObject("MovieWorkerProxy") as MovieLister; 

     IList<string> myList = myMovieLister.FindMovies(); 

現在類的實際FPGA實現是真的不重要的,但我們真正關心的唯一的類在這裏列出如下:

public class MovieLister 
{ 
    public MovieLister(IMovieFinder myMovieFinder, int i) 
    { 
     number = i; 
     movieFinder = myMovieFinder; 
    } 

    public IList<string> FindMovies() 
    { 
     return movieFinder.FindAll(); 
    } 

    private int number; 
    private IMovieFinder movieFinder;   
} 

現在我'不知道爲什麼當我從我的代理工廠調用上面的類做兩個由唯一的構造函數設置爲null設置的字段?任何人都可以幫忙......

回答

3

簡答題:將number和movieFinder設爲屬性,將virtual關鍵字添加到屬性和FindMovies方法中,並直接使用屬性而不是字段。

更長的答案:它與代理的構建方式有關,請參閱Erich Eichingers的博客,瞭解Spring.NET如何創建代理。部分1,23

而且由於您正在代理某個班級,請查看Spring.NET documentation,這表明非虛擬方法存在問題。

相關問題