Another way to implement the Inversion of Control (IoC) principle, in addition to the Dependency Injection, is the plug-in design pattern.
The pattern consists in to load an assembly that implements a common interface at runtime. In this way, a class that depends from an object in an other assemby is completely decoupled from it, or rather, it has no reference to dependent assembly.

In Microsoft .Net you can load an assembly at runtime using the reflection:
System.Reflection.Assembly a;
IPlugIn p;
a = System.Reflection.Assembly.Load("assemblyName");
p = (IPlugIn)a.CreateInstance("typeName");
p.DoWork();
Usually the information about the dependent assembly are placed in an external repository, such as the application configuration file or the database.
458c1494-97cb-447a-af30-67762940eada|0|.0