我想,一些消費者會根據自己的類型特定的裝飾以這樣的方式來裝飾IService
消費者的服務類型,像這樣:註冊裝飾有條件的基礎上簡單的噴油器
container.Register<IService, Service>();
container.RegisterDecorator<IService, ServiceWithCaching>();
container.RegisterDecoratorConditional<IService, ServiceWithLogging>
(ctx => ctx.Consumer.ServiceType ==
typeof(IConsumerThatNeedsDecoratedService));
container.Register<IConsumerThatNeedsServiceWithLogging, Consumer1>();
container.Register<INormalConsumer, Consumer2>();
其中兩個ServiceWithCaching
和ServiceWithLogging
在其構造函數中取IService
,包裝一個IService的實例,在內部調用它並執行其他操作(例如緩存,日誌記錄)。
Consumer1
和Consumer2
在其構造函數中接受IService
。
我要Consumer1
注入ServiceWithLogging
和Consumer2
的ServiceWithCaching
的實例。期望的行爲是Consumer1
將使用緩存結果的IService
的實例,而Consumer2
將使用IService
的實例,這兩個實例都緩存結果的日誌調用。
是否可以在簡單的噴油器,如果沒有任何已知的解決方法?