我越来越发现自己混合了运行时参数和隐式构造注入,这对我来说很难闻。
示例 - 我有一个描述过滤器的基类,以及特定过滤器的各种继承类型(标签、类别、日期、作者等)
var filter = StructureMap.ObjectFactory
.With("caption").EqualTo("Posts filtered by tag:")
.With("parameters").EqualTo(parameters)
.With("displayInSummary").EqualTo(true)
.GetInstance<TagListFilter>();
我这样做的原因是因为在构造函数中我有一个接口,我希望 StructureMap 使用它来注入一个具体的类(IArticleConfigurator):
public TagListFilter(string caption, IDictionary<string,string> parameters, bool displayInSummary, IArticleConfigurator configurator)
:base(caption, parameters,displayInSummary, configurator)
但我突然想到,我替换了一个简单的构造函数,尽管用一个具体的类而不是接口,本质上是相同的东西,但使用 DI 注入 1 个具体类型。我这样做是因为目前我们的配置位于 xml 文件中,但将被移动到 CMS,因此使用界面似乎是个好主意。
这似乎是错误的,不符合 DI 的精神。
我应该使用工厂来生成我的各种过滤器吗?如果是这样,我仍然可以利用 DI 来获取我的 IArticleConfigurator 的具体实例吗?