TinyIoC -Несколько реализаций интерфейса

Я только начинаю изучать IoC и внедрение зависимостей. Я планирую сделать проект MonoTouch и хотел использовать TinyIoC, но сначала хотел его протестировать. Я создаю фиктивное консольное приложение для обработки кредитных карт, и у меня возникают проблемы с настройкой TinyIoC, поскольку у меня есть несколько реализаций моего интерфейса. Это мое тестовое приложение.

Интерфейс:

public interface IPaymentProcessor
{
    void ProcessPayment(string cardNumber);
}

Две реализации интерфейса:

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
    }
}

Простые вещи. Теперь у меня есть класс, который принимает интерфейс в качестве параметра в конструкторе....

CreditCardProcessor

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(, которая по умолчанию )?

8
задан Ryan Alford 2 May 2012 в 21:06
поделиться