我有以下情形:Unity:註冊一個裝飾器在兒童容器中
在基本容器中,我正在註冊一個類型。
container.RegisterType<IFoo,Foo>();
在一個子容器中,我想註冊一個包裝基本容器使用的裝飾器。所以,如果我有這個類:
public class FooDecorator: IFoo
{
public FooDecorator(IFoo foo) {}
}
我要註冊:
childContainer.RegisterType<IFoo,FooDecorator>();
這似乎是合理的,我當孩子容器中FooDecorator構造解析的IFoo,它會嘗試解析父容器的IFoo。但事實並非如此。它試圖再次解析FooDecorator,並因此一次又一次地引發StackOverflow異常。
我知道這可以通過在子容器註冊指定的InjectionConstructor,這樣解決:
childContainer.RegisterType<IFoo,FooDecorator>(
new InjectionConstructor(new ResolvedParameter<Foo>()));
但這似乎脆弱。如果有人想將基本容器中IFoo的實際實例從Foo更改爲其他內容,那麼他也必須修改所有子容器。
所以我錯過了什麼?有沒有更好的解決方案?
呀,這其實目前我在做什麼,但我不喜歡這種解決方案非常多,因爲現在我要手動註冊每種使用IFoo的類型,或者確保在每個子容器中註冊IFoo,即使它不需要重寫默認行爲。 – 2011-04-18 09:37:31
您可以使用相同的映射在父容器中註冊兩次IFoo:一個已命名的註冊和一個默認的註冊。 – onof 2011-04-18 11:10:50
是的,我再次使用了一個解決方案,但似乎有點時髦。我想現在沒有其他辦法了。謝謝 – 2011-04-20 05:29:39