【发布时间】:2012-02-21 06:09:53
【问题描述】:
我在一分钟前问了一个更普遍的问题:How to organize DI Framework usage in an application?,我得到的反馈是我使用的是服务定位器模式,而不是 Martin Fowler 在此处指出的真正的 DI:http://martinfowler.com/articles/injection.html
实际上,我前几天刚读过那篇文章,但显然还没有完全掌握。
假设我有以下代码:
interface ICardReader
{
string GetInfo();
void SetDebugMode(bool value);
void Initialize(string accountToken);
void ShowAmount(string amount);
void Close();
ICreditCardInfo GetCardInfo();
}
public class MagTekIPAD: ICardReader
{
public ICreditCardInfo GetCardInfo()
{
var card = GetCardDataFromDevice();
// apparently the following line is wrong?
var ccInfo = Inject<ICreditCardInfo>.New();
ccInfo.Track1 = MakeHex(card.EncTrack1);
ccInfo.Track2 = MakeHex(card.EncTrack2);
ccInfo.MagSignature = MakeHex(card.EncMP);
ccInfo.MagSwipeKeySN = MakeHex(card.KSN);
ccInfo.MagSignatureStatus = MakeHex(card.MPSts);
ccInfo.MagDeviceSN = ipad.Serial;
ccInfo.MSREncryptType = "MAGENSA_V5";
return ccInfo;
}
// Other implementation details here ...
}
在这个例子中,我可以将依赖注入到构造函数中——我认为这是修复“这种”场景的正确方法。
但是,如果我实际上需要创建未知数量的相关对象(或者有任何其他正当理由我需要在类中动态创建依赖项)怎么办?
【问题讨论】:
-
@typeoneerror 我注意到对代码块进行了一些编辑,但现在没有颜色。没什么大不了的,只是想知道为什么会这样?
-
不确定。可能是末尾缺少的括号(添加)。我刚刚添加了stackoverflow.com/editing-help#syntax-highlighting
-
@typeoneerror 必须是括号
-
看起来您正在尝试使用 DI 创建实体或值对象,这通常不是正确的方法:stackoverflow.com/questions/4835046/…
-
不过,如果您必须创建任意数量的依赖项实例,您可以使用抽象工厂:stackoverflow.com/questions/1943576/…
标签: c# .net dependency-injection inversion-of-control ioc-container