2010-03-04 104 views
0

我有以下用例覆蓋的部件:城堡溫莎:在未來

我要註冊的應用程序的所有配置之間共享的所有組件。然後,我想註冊一系列動態配置的「插件」,這些插件以IRegistration的自定義實現方式表示。

只有這樣我才能解決我的應用程序的起點。

我想插件要做的一件事是覆蓋服務實現。事情是這樣的:

public class SomePlugin { 
    public void Register(IKernel kernel) { 
    kernel.RemoveComponent(typeof(DefaultServiceImplementation).FullName); 
    kernel.Register(
      Component.For<IService>() 
       .ImplementedBy<AlternateServiceImplementation>()) 
    } 
} 

但是,如果任何已註冊的組件對IService依賴這不起作用。

我知道我可以先註冊插件,但這是限制其他幾個原因。我怎樣才能滿足我的具體要求?

我能拿出最好的事情是一樣的東西

kernel.ResolvingComponent += (model, a, b) => { 
    if(model.Service == typeof(IService)) 
    model.Implementation = typeof(AlternateServiceImplementation); 
} 

我認爲這可能在某些情況下有限的工作,但它是遠遠不夠理想。

+0

所以基本上你希望* last * registered組件是默認組件? – 2010-03-04 18:28:57

+0

當然這是一個實現。更具體地說,我很感興趣的是,「對於先前由X1實現的組件X,嘿,使用X2作爲默認值」 – 2010-03-04 18:37:15

+0

我的意思是它總是*最後一個註冊?或者有時候?你介意使用屬性? – 2010-03-04 19:15:44

回答

3

喬治,

我相信你在找什麼是IHandlerSelector

+0

我認爲這是。謝啦 – 2010-03-04 19:22:27