Examples of IoC Containers [closed]

I’ve used StructureMap quite a bit. The rest of your question is pretty loaded. I’ll try to explain the concept in an example.

Suppose you created a website that will accept payments through PayPal. PayPal is now a dependency. But you don’t want to code against a specific PayPal provider.

Instead, you would create and code against an interface like this:

interface IPaymentProcessor
{
    bool ProcessPayment(amount, ....);
}

All your PayPal code would reside in a class that implements the methods of your interface – PayPalPaymentProcessor, for example.

Now you have an object that you will actually use to process the payments. This could be a Controller (ASP.NET-MVC, ViewModel-WPF) or just a class as shown here:

class PaymentProcessor
{
    private IPaymentProcessor _processor = null;
    public PaymentProcessor(IPaymentProcessor processor)
    {
        _processor = processor;
    }

    public bool ProcessTransaction(Transaction trans)
    {
       _processor.ProcessPayment(trans.amount, ...);
    }
}

This is where an IoC container comes in. Instead of you calling the constructor manually, you would let an IoC container inject the dependency:

PaymentProcessor processor = ObjectFactory.GetInstance<PaymentProcessor>();

This piece of code tells StructureMap “Anytime you see a constructor that needs an IPaymentProcessor, return a new PayPalPaymentProcessor“.

ObjectFactory.Initialize(x =>
{ 
    x.ForRequestedType<IPaymentProcessor>().TheDefaultIsConcreteType<PayPalPaymentProcessor>();
});

All this mapping is separate from your implementation code and you could swap out these at a later point with little refactoring needed. There is a lot more to IoC containers, but that the basic concept. You can automate the injection of constructors to avoid the calls directly to ObjectFactory as well.

Hope this helps!

Leave a Comment