2011-10-14 62 views
1

我剛纔剛剛開始使用溫莎城堡,並有一個問題。溫莎城堡 - DefaultInterface當解決

假設我有一個接口IService - 我有五個類實現它(IServiceOne,IServiceTwo,IServiceThree)等。

從那裏我有類,這impImenent每個IServices。他們被合適地命名爲ServiceOneProvider,ServiceTwoProvider,ServiceThreeProvider等。在這些類中,我正在解析一個IService對象。

所以我想知道的是 - 是否有可能使用相同的DefaultInterfaces(可以在註冊期間使用)解析IService對象,以便ServiceOneProvider將獲得ServiceOne對象,ServiceTwoProvider將獲得ServiceTwo對象等等?

感謝,

-Ross

回答

0

我沒有看到建在溫莎做一些這樣的事情。我雖然關於一個HandlerSelector,但是當選擇器正在運行時,你不知道請求依賴關係的類型,所以這沒有幫助。您可以使用TypedFactoryFacility。只需創建一個接口來回報您的IService對象(C#版本):

public interface IProviderFactory 
{ 
    IService GetServiceOne(); 
    IService GetServiceTwo(); 
    IService GetServiceThree(); 
} 

然後命名你的IService實例作爲 「ServiceOne」, 「ServiceTwo」,等等

Component.For<IService>().ImplementedBy<ServiceOne>().Named("ServiceOne"), 
Component.For<IService>().ImplementedBy<ServiceTwo>().Named("ServiceTwo"), 
Component.For<IService>().ImplementedBy<ServiceThree>().Named("ServiceThree"), 

然後讓你的供應商取決於工廠並調用相應的「Get」方法:

public class ServiceOneProvider 
{ 
    public ServiceOneProvider(IProviderFactory factory) 
    { 
     var service = factory.GetServiceOne(); 
    } 
} 

public class ServiceTwoProvider 
{ 
    public ServiceTwoProvider(IProviderFactory factory) 
    { 
     var service = factory.GetServiceTwo(); 
    } 
} 

public class ServiceThreeProvider 
{ 
    public ServiceThreeProvider(IProviderFactory factory) 
    { 
     var service = factory.GetServiceThree(); 
    } 
}