【发布时间】:2011-10-27 14:41:12
【问题描述】:
我正在处理遗留代码。
我有同一个类的不同方法,它们将不同的参数传递给依赖项的构造函数。我正在尝试介绍一些基本的 IoC 用法。现在我有 StructureMap 像这样传递我的参数:
var thing = ObjectFactory.GetInstance<IThingInterface>(new ExplicitArguments(
new Dictionary<string, object> {
{ "constructorArgA", notShown },
{ "constructorArgB", redacted.Property } }));
为 constructorArgA 和 B 传递的实际属性根据我所在的位置而变化。
有一种方法可以通过实际类型来配置它,而不是“constructorArgA”,就像你在配置 objectFactory 时可以做的那样,比如:
x.For<IHidden>().Use<RealType>()
.Ctor<IConfig>().Is(new Func<IContext, IConfig>(
(context) => someMethodToGetIConfig()));
如果我从头开始编写此代码,我可能会构建一些不同的依赖关系以避免这种情况,但这不是我现在的选择。
【问题讨论】:
-
或者我应该切换到属性注入而不是构造函数注入?
标签: inversion-of-control ioc-container structuremap