Suppose you are using dynamics crm to build a product that can be customized for your customers. And while developing this kind of application you have to build some business logic as a feature of your product. After installing this application to your customer, customer might want to change this feature of yours with a web service they already have. So you may want to use a basic repository pattern in order to respond your customer. However in CRM there is no way to do it with Dependency Injection pattern. You need to change it although IPlugin has a method that accepts a service provider. It would be nice to register my own components to the default service provider so that I can make customizations without changing any code but adding classes. Another problem is plugin registration. I might have an object hierarchy that contains some levels of inheritance such as, IPlugin => PluginBase => CustomPlugin => Plugin2 registration process should also handle these but throws an error.