小编use*_*423的帖子

在城堡 - 温莎的多个装饰员模式

我们正在重新设计一些遗留软件以使其更易于测试,并决定使用Dependency-Injection和Castle.Windsor来帮助我们.

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

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

interface IUpdateableValue<T> 
{
  T Get();
};
Run Code Online (Sandbox Code Playgroud)

我们有三组要检索的数据,包含许多组件,都实现了IUpdateableValue()(伪代码):

JsonParser(
    Decompressor(
        Decrypter(decryptionKey
            FileCache(filename, 
                HttpWebDownloader(url))))

XmlParser(
    Decompressor(
        Decrypter(decryptionKey2
            FileCache(filename2, 
                HttpWebDownloader(url2))))
Run Code Online (Sandbox Code Playgroud)

我无法将设计融入像Castle-Windsor这样的DI框架中.我怀疑其中一些可以由命名实例处理,但这对于这种用法来说似乎很臭.

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

我在想我们的设计有问题,但不确定如何修复它.

关于如何进步的任何想法?

.net c# dependency-injection castle-windsor ioc-container

13
推荐指数
1
解决办法
2495
查看次数