<分区>
有没有人有很好的 IoC 容器示例(最好是在 c# 中)以及如何以及为什么使用它们?我已经检查了 wiki page和 Ayende's例如,但我还不太明白这个概念。
我应该在何时何地使用 IoC 容器?
<分区>
有没有人有很好的 IoC 容器示例(最好是在 c# 中)以及如何以及为什么使用它们?我已经检查了 wiki page和 Ayende's例如,但我还不太明白这个概念。
我应该在何时何地使用 IoC 容器?
最佳答案
我用过 StructureMap相当多。你的问题的其余部分非常多。我将尝试在示例中解释这个概念。
假设您创建了一个接受通过 PayPal 付款的网站。 Paypal 现在是一个依赖项。但是您不想针对特定的 PayPal 提供商进行编码。
相反,您将针对这样的界面进行创建和编码:
interface IPaymentProcessor
{
bool ProcessPayment(amount, ....);
}
您的所有 PayPal 代码都将驻留在一个实现接口(interface)方法的类中 - 例如,PayPalPaymentProcessor
。
现在您有了一个实际用于处理付款的对象。这可以是 Controller (ASP.NET-MVC、ViewModel-WPF)或只是一个类,如下所示:
class PaymentProcessor
{
private IPaymentProcessor _processor = null;
public PaymentProcessor(IPaymentProcessor processor)
{
_processor = processor;
}
public bool ProcessTransaction(Transaction trans)
{
_processor.ProcessPayment(trans.amount, ...);
}
}
这就是 IoC 容器的用武之地。不是手动调用构造函数,而是让 IoC 容器注入(inject)依赖项:
PaymentProcessor processor = ObjectFactory.GetInstance<PaymentProcessor>();
这段代码告诉 StructureMap “任何时候你看到一个需要 IPaymentProcessor
的构造函数,返回一个新的 PayPalPaymentProcessor
”。
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IPaymentProcessor>().TheDefaultIsConcreteType<PayPalPaymentProcessor>();
});
所有这些映射都与您的实现代码分开,您可以在以后更换它们,几乎不需要重构。 IoC 容器还有很多内容,但这是基本概念。您也可以自动注入(inject)构造函数以避免直接调用 ObjectFactory
。
希望这对您有所帮助!
关于c# - IoC 容器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770039/