【发布时间】:2011-11-28 13:01:42
【问题描述】:
我有一个带有以下构造函数的 Order 类
public Order(IProduct product, short count)
{
this._product = product;
this._count = count;
}
我正在尝试设置 Unity IoC 容器,显然要构建订单对象,我需要知道计数和产品,但这些是在运行时确定的;计数可以是任何值,产品可以是任何产品,例如胡萝卜、甜瓜等
那么如何为此应用 IoC?
我认为的一种方法是我的构造函数只接受对象依赖项,然后使用新的 Initialize() 方法添加任何其他必需的属性:
public Order (IProduct product)
{
this._product = product;
}
public Initialize(short count)
{
this._count = count;
}
这样,无论谁创建 Order 对象,之后都必须调用 Initialize() 方法,以便将 IoC 容器无法处理的其他属性添加到其中。
这是您推荐/使用的方法吗?
【问题讨论】:
-
不完全是,他们确实在 MyIntFactory 类中引入了新级别的依赖关系: public MyIntfFactory : IMyIntfFactory { public IMyIntf Create(string runTimeParam) { return new MyIntf(runTimeParam); } }
-
我很惊讶为什么人们会提高这个答案,因为整个想法是对象实例化不应该发生在应用程序内部,而是来自 Unity,而这种方法只会增加新的复杂性并违反它。跨度>
-
你可能想参考这个讨论:stackoverflow.com/questions/4835046/…
-
@William,对象实例化发生在整个应用程序中。 “更新”您的实体并不是您试图通过 DI 避免的。 Count 是一个整数,而不是依赖项。
标签: c# asp.net inversion-of-control unity-container ioc-container