Inversion of control (IOC containers) .NET IOC patterns