首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >城堡-温莎的多重装饰模式

城堡-温莎的多重装饰模式
EN

Stack Overflow用户
提问于 2012-05-25 21:59:41
回答 1查看 3K关注 0票数 14

我们正在重新设计一些遗留软件以提高可测试性,并决定使用依赖注入和Castle.Windsor来帮助我们。

首先,我们的目标是:*多个装饰器,这些装饰器都在数据流上工作。*装饰器的多种组合是可能的,每种情况下的根节点都可能需要从不同的位置获取数据。

从技术上讲,我们的设计如下:

代码语言:javascript
复制
interface IUpdateableValue<T> 
{
  T Get();
};

例如,我们有三组数据要通过多个组件进行检索,它们都实现了IUpdateableValue() (伪代码):

代码语言:javascript
复制
JsonParser(
    Decompressor(
        Decrypter(decryptionKey
            FileCache(filename, 
                HttpWebDownloader(url))))

XmlParser(
    Decompressor(
        Decrypter(decryptionKey2
            FileCache(filename2, 
                HttpWebDownloader(url2))))

我在设计中很难适应像Castle-Windsor这样的依赖注入框架。我怀疑其中的一些可以由命名实例来处理,但对于这种用法来说,这似乎很糟糕。

这个想法是,例如JsonParser和XmlParser实例的“用户”不知道(或关心)数据是来自HttpUrl、文件还是神奇地从帽子中拉出来。

我认为我们的设计有问题,但不确定如何修复它。

有关于如何进步的想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-05-30 06:13:20

使用Castle Windsor,您可以通过以正确的顺序注册装饰器来隐式配置装饰器。您需要先注册外部装饰器:

代码语言:javascript
复制
container.Register(Component
  .For<IUpdateableValue>()
  .ImplementedBy<JsonParser>());
container.Register(Component
  .For<IUpdateableValue>()
  .ImplementedBy<Decompressor>());
container.Register(Component
  .For<IUpdateableValue>()
  .ImplementedBy<Decrypter>());
...

当您解析IUpdateableValue种姓时,Windsor将自动连接依赖项,以便它们正确嵌套。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10755727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档