2012-06-29 45 views
1

我自動註冊實現了同一個接口的多個組件:註冊溫莎組件爲直接使用和作爲一個數組

container.Kernel.Resolver.AddSubResolver(
    new ArrayResolver(container.Kernel)); 

container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly()) 
    .BasedOn<IPaymentPostProcessor>() 
    .WithService.FromInterface(typeof(IPaymentPostProcessor)) 
    .Configure(c => c.Named(c.Implementation.Name)) 
    .Configure(c => c.LifeStyle.PerWebRequest)); 

這工作時,我有數組本身的依賴關係:

public class PaymentPostProcessorManager{ 
    public PaymentPostProcessorManager(IPaymentPostProcessor[] processors){} 
} 

但沒有,如果我有實現接口的特定組件的依賴關係:

public class SpecialService{ 
    public OtherService(SpecificPostProcessor processor){} 
} 

這會失敗,它表示沒有組件已經爲SpecificPostProcessor註冊。如果我個別註冊了SpecificPostProcessor,那麼數組分辨率最終會包含它兩次。

我該如何做基於接口的自動註冊,並讓它自動註冊爲特定的依賴關係?

回答

3

您需要爲您的SpecificPostProcessor添加WithService.Self()如果您想將其公開爲服務。

+0

哦不,我似乎沒有.Self()作爲選項使用2.1。由於與項目其他部分的衝突,我一直在避免升級一段時間 - 它似乎使用rhino.esb破壞我的代碼。這是唯一的方法嗎? –

+0

我認爲在v2.1中有'WithService.Select(你在這裏做的工作)'' –