|
4
|
| Stéphane · 技术社区 · 16 年前 |
|
|
1
6
每当需要根据运行时值改变依赖关系时, Abstract Factory 是一般的解决方案。 不要将ISearchService注入控制器,而是注入ISearchServiceFactory:
我并不完全清楚您需要对哪个运行时值进行更改,但假设是查询,则可以这样定义ISearchServiceFactory:
|
|
|
2
1
我试图弄清楚如何使用抽象工厂模式,仍然让structuremap解析组件的所有依赖项。 我相信这是我将要实现它的方式,但是我在这里提交这个来获得一些反馈,如果有人会阅读这个。 正如前面的回答中所解释的,我不想根据抽象工厂中需要的提供者构建整个对象图。 IE:
我能做的是让抽象工厂使用我的容器根据一个参数(在我的例子中来自于querystring)创建搜索管理器的实例。 结构映射允许以这种方式创建命名实例:
我需要一种方法在我的抽象工厂中注入容器。 我可能会用这样定义的包装器包装容器。这可以防止我将结构图泄漏到我的项目中。不管怎样,我不需要抽象工厂中的这两个功能,但不需要:
执行情况:
并设置structuremap来解析对抽象工厂的依赖关系,如下所示:
我的工厂会简单得多,并且会像这样创建我的实例:
这样看起来很干净:)。 思想? |
|
|
3
0
这是一个更广泛的评论,而不是解释为什么抽象工厂看起来很复杂的答案。下面是一些更接近现实的东西:
FacetPository对于任何提供程序都是相同的,但SearchManager更改、ConfigManager更改和BooleanQueryBuilder是一个抽象类,具有不同的提供程序的不同实现(因为每个API的查询不使用相同的关键字),所有这些依赖项当前都由结构映射基于控制器的类型。 我真的很想在这里保留结构图的好处,而不是一路使用工厂,为每一个不同的部分。” 关于我的问题的另一个建议,请参阅我问题末尾的编辑部分。 |