gpt4 book ai didi

c# - TinyIoC - 接口(interface)的多种实现

转载 作者:太空狗 更新时间:2023-10-29 18:25:26 26 4
gpt4 key购买 nike

我刚刚开始学习 IoC 和依赖注入(inject)。我正计划做一个 MonoTouch 项目并想使用 TinyIoC 但我想先测试一下。我正在创建一个虚拟信用卡处理控制台应用程序,但由于我有多个接口(interface)实现,所以我在配置 TinyIoC 时遇到了问题。这是我的测试应用。

接口(interface):

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

接口(interface)的两个实现:

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

美国运通支付处理器

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

简单的东西。现在我有一个类接受接口(interface)作为构造函数中的参数....

信用卡处理器

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 将接口(interface)的哪个实现传递给构造函数。如果我运行这段代码,我将始终使用 VisaPaymentProcessor 实现。

那么我怎样才能让 TinyIoC 将 AmexPaymentProcessor 实现传递给构造函数而不是 VisaPaymentProcessor(这似乎是默认的)?

最佳答案

我自己没有用过 TinyIoC,但我怀疑你想要:

TinyIoCContainer.Current.Register(typeof(IPaymentProcessor),
typeof(AmexPaymentProcessor));

(如果你想使用 Amex。)

还有各种其他可用的 Register 重载,包括一个使用名称 的重载,这在您解析时可能很有用。这实际上取决于您要实现的目标,这在问题中并不是很清楚。

关于c# - TinyIoC - 接口(interface)的多种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com