IoC と Dependency Injection について学び始めたばかりです。私は MonoTouch プロジェクトを計画しており、TinyIoC を使用したいと考えていましたが、最初にテストしたかったのです。ダミーのクレジット カード処理コンソール アプリを作成していますが、インターフェイスの実装が複数あるため、TinyIoC の構成方法に問題があります。これは私のテストアプリです。
インターフェース:
public interface IPaymentProcessor
{
void ProcessPayment(string cardNumber);
}
インターフェイスの 2 つの実装:
VisaPaymentProcessor
public class VisaPaymentProcessor : IPaymentProcessor
{
public void ProcessPayment(string cardNumber)
{
if (cardNumber.Length != 13 && cardNumber.Length != 16)
{
new ArgumentException("Card Number isn't the correct length");
}
// some code for processing payment
}
}
AmexPaymentProcessor
public class AmexPaymentProcessor : IPaymentProcessor
{
public void ProcessPayment(string cardNumber)
{
if (cardNumber.Length != 15)
{
new ArgumentException("Card Number isn't the correct length");
}
// some code for processing the payment
}
}
シンプルなもの。これで、コンストラクターのパラメーターとしてインターフェイスを受け入れるクラスができました....
クレジット カード プロセッサ
public class CreditCardProcessor
{
public IPaymentProcessor PaymentProcessor { get; set; }
public CreditCardProcessor(IPaymentProcessor processor)
{
this.PaymentProcessor = processor;
}
public void ProcessPayment(string creditCardNumber)
{
this.PaymentProcessor.ProcessPayment(creditCardNumber);
}
}
私のコンソールアプリは次のようになります....
class Program
{
static void Main(string[] args)
{
TinyIoCContainer.Current.AutoRegister();
var creditCardProcessor = TinyIoCContainer.Current.Resolve<CreditCardProcessor>();
creditCardProcessor.ProcessPayment("1234567890123456"); // 16 digits
}
}
Resolve
そのため、コンストラクターに渡すインターフェイスの実装をどのように伝えるかを理解しようとしています。このコードを実行すると、常にVisaPaymentProcessor
実装が使用されます。
では、TinyIoC が(デフォルトのように見える)AmexPaymentProcessor
ではなくコンストラクターに実装を渡すようにするにはどうすればよいでしょうか?VisaPaymentProcessor