2011-07-08 72 views
0

我想知道是否在溫莎有以下場景的模式。城堡溫莎覆蓋默認服務覆蓋

基本上我有一個已註冊的服務(DefaultService),並且有一個插件,我想用(PluginBasedService)替換所有實例的服務(DefaultService)。

我正在使用hack -Kernel.RemoveComponent(),然後重新添加基於插件的服務。這似乎很難。對於這種情況,IHandleSelector看起來也很糟糕。

解決「最後註冊」服務的Autofac方法也適用於我。

乾杯, 克里斯

public class VM 
{ 
    public VM(IService) 
    { 

    } 
} 

public interface IService {} 

public class DefaultService : IService {} 
public class PluginBasedService : IService {} 

Container.Register(
    Component.For<IService>().ImplementedBy<DefaultService>(), 
    Component.For<VM>() 
); 

    // this is called in a dynamically loaded assembly, after the default service has been registered 
Container.Register(
    Component.For<PluginBasedService>() 
    .ServiceOverrides(ServiceOverride.ForKey<IService>.Eq<PluginBasedService>()) 
); 


Container.Resolve<IService>() // is DefaultService -> I want "PluginBasedService" 

回答

1

我不知道我理解的問題(也許你可以重寫它,它不是很清楚你以後),但如果我理解正確的話,你什麼之後就是能夠在特定環境下爲特定服務使用不同的組件。

如果確實如此,我認爲IHandlerSelector或子容器可能提供一種方法來實現這一點。

+0

我整理了一下。我會看看孩子的容器,看看他們是否能解決我的問題。感謝 – Chris

+0

順便說一句,即將發佈的Windsor(v3)版本可讓您在註冊時強制組件成爲服務的默認設置。 –