2011-04-10 56 views
0

我正在將一個項目與Spring.NET和Caliburn v2一起。我有一些我試圖實例化的對象,但不知道如何去做。Spring.Net/Caliburn v2依賴地獄?

我一直在使用Caliburn的IoC方面註解(Singleton和PerRequest)來獲取對象到Spring上下文中。問題在於我有兩個對象A和B,其中對象B是對象A的一個子類(意味着B也是A)。這意味着,如果我同時註冊,Spring會在請求類型A的對象時抱怨含糊不清。爲了解決這個問題,我可以停止使用Caliburn的IoC方面來註冊對象,而是將它們註冊到Spring上下文XML文件中。這樣我就可以在Spring上下文文件中指定一個命名對象,用於對象C的構造函數中,該對象需要注入類型B的對象。

但是,這會產生一個新問題。對象B需要注入Caliburn窗口管理器(在上下文XML文件中列出的對象被實例化時,Spring容器不可用),但是稍後在Caliburn加載並將其自身對象添加到Spring後容器)。

我可以簡單地刪除繼承並讓對象A和B之間發生一些代碼重複,但那麼做OO編程的重點是什麼?否則,我想我正在尋找一種方法來指定Spring.NET上下文XML中的對象,但在Caliburn加載之前不要解析它們。

任何想法?

回答

0

我設法解決這個問題,通過維護依賴於校準的彈簧上下文XML文件的單獨列表。我通過在我的應用程序引導程序中重寫的DisplayRootView()方法的開始處添加以下代碼將這些代碼加載到ApplicationContext對象中:

var objectDefinitionReader = new XmlObjectDefinitionReader(applicationContext); 
objectDefinitionReader.LoadObjectDefinitions(GetCaliburnDependentContextFiles()); 
applicationContext.Refresh(); 
1

我不熟悉的卡利,但如果你想推遲實例化,那麼你可能標誌着XML爲延遲初始化你的對象,像這樣:<object id="foo" type="..." lazy-init="true"/>

這樣,他們將被實例化時,首先要求他們