Минуту назад я задал более общий вопрос: Как организовать использование DI Framework в приложении? , и я получил ответ, что использовал шаблон локатора служб, а не истинный 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 ...
}
В этом примере я мог бы вставить зависимость в конструктор - и я думаю, что это правильный способ исправить «этот» сценарий.
Но что, если мне действительно нужно создать неизвестный номер рассматриваемого объекта (или есть какая-либо другая законная причина, по которой у меня возникнет необходимость создать зависимость на лету в классе)?