0

我需要我的單身服務取決於每個Web請求對象,並且我想使用Castle的TypedFactoryFacility爲我的對象自動創建工廠。城堡工廠短期生活依賴

我的註冊看起來像這樣:

我在web.xml中也註冊了每Web請求的續航時間,工廠接口看起來是這樣的:

public interface IMailMessageQueueProvider 
    { 
     IMailMessageQueue Get(); 
    } 

而且我得到這個不錯的錯誤:

Type Model.IMailMessageQueueProvider is abstract. 
As such, it is not possible to instansiate it as implementation of service   
Model.IMailMessageQueueProvider. 

爲什麼城堡不創建工廠?

這是我跟一個參考:http://stw.castleproject.org/Windsor.Typed-Factory-Facility-interface-based-factories.ashx

+0

哪個版本是? – 2012-03-30 22:10:19

+0

只是爲了踢,嘗試重命名'Get'方法到別的東西('BuildCreateMailMessageQueue'或類似的東西) – 2012-03-30 22:11:54

+0

我使用2.5,與其他名稱早些時候嘗試:創建()和GetIMailMessageQueue(),我可以嘗試其他人。 .. – 0lukasz0 2012-03-30 22:15:13

回答

1

我終於發現我失蹤了。我使用默認實現的微內核:

IKernel kernel = new DefaultKernel(); 

這是缺少動態代理支持。有兩個解決方案,要麼以微內核堅持和添加動態代理工廠的依賴:

IKernel kernel = new DefaultKernel(new DefaultProxyFactory()); 

或切換到Castle Windsor Container

0

而不是創建要實例各類型的特定工廠(例如,您IMailMessageQueueProvider),一個滑頭的方法可能是創建一個通用的工廠: - 通常的方式

public interface IServiceFactory 
{ 
    T Create<T>(); 
    void Release(object service); 
} 

與溫莎註冊它: -

container.Register(Component.For<IServiceFactory>().AsFactory()); 

將IServiceFactory注入要執行實例化的類中,然後調用Create方法。例如。

var queue = _factory.Create<IMailMessageQueue>();