Bra*_*ore 4 .net c# dependency-injection ioc-container inversion-of-control
我在一分钟前问了一个更普遍的问题:如何在应用程序中组织DI Framework使用?我得到的反馈是我使用服务定位器模式而不是真正的DI,正如Martin Fowler在这里指出的那样: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 ...
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我可以将依赖注入到构造函数中 - 我认为这是修复'this'场景的正确方法.
但是,如果我真的需要创建一个未知数量的对象(或者是否有任何其他正当理由我需要在课堂上动态创建依赖)呢?
此示例让我觉得您尝试ICreditCardInfo使用IoC容器命名地创建数据传输对象.这些对象不应该像服务那样具有任何真正的依赖关系.创建DTO的正确方法是使用new运算符:
return new CreditCardInfo(
MakeHex(card.EncTrack1),
MakeHex(card.EncTrack2),
MakeHex(card.EncMP),
MakeHex(card.KSN),
MakeHex(card.MPSts),
ipad.Serial,
"MAGENSA_V5");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |