2012-11-09 109 views
1

警告:我真的是新來的溫莎。城堡溫莎服務裝訂組件

我有1個解決方案,有多個項目。我有一個項目包含我們所有的接口(名爲「Framework」)和其他具有這些接口的具體實現的接口。我試圖讓溫莎綁定這些並解決我的接口,如下所示:

其中一個項目被稱爲「訂單」,其中有一個Order類,它實現了在框架項目中定義的IOrder。這兩個項目之間有一個參考,它會進行編譯。

我有了,我已經創建了一個安裝程序的實際溫莎呼叫另一個項目:

public class CoreInstaller : IWindsorInstaller 
    { 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(
      AllTypes.FromAssemblyNamed("Framework"), 
      AllTypes.FromAssemblyNamed("Orders") 
     ); 
    } 
    } 

我實例溫莎容器這樣:

new WindsorContainer().Install(new CoreInstaller()); 

當我試圖解決IOrder,它失敗:

Castle.MicroKernel.ComponentNotFoundException:沒有組件的s支持服務Framework.IOrder被發現

我也嘗試翻轉安裝函數中的項目首先加載Orders但我得到同樣的錯誤。

任何溫莎的用戶在那裏可以幫助我嗎?

+0

FYI, 「類」 是funtionally相當於 「AllTypes」,但它更清晰要做的。 [詳細信息](http://docs.castleproject.org/Windsor.Whats-New-In-Windsor-3.ashx#Added_Classes_and_Types_registration_API_entry_types_for_batch_registration_of_components_12) – TylerOhlsen

+0

請注意此用法。您將所有類型註冊爲單身人士(默認生活方式)。你可能有線程問題。 – TylerOhlsen

回答

1

您已經有效地告訴Windsor獲取所有類型,但您還沒有告訴它如何處理它們。如果您不打算過濾要註冊的類型和要註冊的接口,則需要將Pick()方法添加到註冊中。

例如...

container.Register(
    Classes.FromAssemblyNamed("Framework").Pick(), 
    Classes.FromAssemblyNamed("Orders").Pick() 
); 
+0

這很討厭。我認爲@ OnResolve的代碼是有道理的,它是一個#fail它不起作用。我將它記錄到問題跟蹤器中供某個人實現,或者更好地發送一個請求;) –

+0

這只是一個設計決定,我敢打賭,FromAssemblyDescriptor沒有直接註冊這些類是有技術原因的。我同意這並不明顯,並且可以在這樣的Fluent API中更好地命名,但我確定他們有他們的理由。 – TylerOhlsen

+0

不知道。但我想不出一個不這樣做的好理由 –