我们正在重新设计一些遗留软件以提高可测试性,并决定使用依赖注入和Castle.Windsor来帮助我们。
首先,我们的目标是:*多个装饰器,这些装饰器都在数据流上工作。*装饰器的多种组合是可能的,每种情况下的根节点都可能需要从不同的位置获取数据。
从技术上讲,我们的设计如下:
interface IUpdateableValue<T>
{
T Get();
};例如,我们有三组数据要通过多个组件进行检索,它们都实现了IUpdateableValue() (伪代码):
JsonParser(
Decompressor(
Decrypter(decryptionKey
FileCache(filename,
HttpWebDownloader(url))))
XmlParser(
Decompressor(
Decrypter(decryptionKey2
FileCache(filename2,
HttpWebDownloader(url2))))我在设计中很难适应像Castle-Windsor这样的依赖注入框架。我怀疑其中的一些可以由命名实例来处理,但对于这种用法来说,这似乎很糟糕。
这个想法是,例如JsonParser和XmlParser实例的“用户”不知道(或关心)数据是来自HttpUrl、文件还是神奇地从帽子中拉出来。
我认为我们的设计有问题,但不确定如何修复它。
有关于如何进步的想法吗?
发布于 2012-05-30 06:13:20
使用Castle Windsor,您可以通过以正确的顺序注册装饰器来隐式配置装饰器。您需要先注册外部装饰器:
container.Register(Component
.For<IUpdateableValue>()
.ImplementedBy<JsonParser>());
container.Register(Component
.For<IUpdateableValue>()
.ImplementedBy<Decompressor>());
container.Register(Component
.For<IUpdateableValue>()
.ImplementedBy<Decrypter>());
...当您解析IUpdateableValue种姓时,Windsor将自动连接依赖项,以便它们正确嵌套。
https://stackoverflow.com/questions/10755727
复制相似问题