IoC контейнер — це шаблон проєктування, який дозволяє спростити впровадження залежностей між класами дотримуючись інверсії керування.

Шаблон проєктування у вигляді UML діаграми

Стосунки ред.

Є реалізацією фабричного методу

Опис мовою C# ред.

class IoC 
{
  readonly IDictionary<Type, Type> types = new Dictionary<Type, Type>();

  public void Register<TContract, TImplementation>()  
  { 
    types[typeof(TContract)] = typeof(TImplementation);
  }

  public T Resolve<T>()  
  {
    return (T)Resolve(typeof(T));
  }

  public object Resolve(Type contract) 
  {
    Type implementation = types[contract];
    ConstructorInfo constructor = implementation.GetConstructors()[0];
    ParameterInfo[] constructorParameters = constructor.GetParameters();
    if (constructorParameters.Length == 0) 
    { 
      return Activator.CreateInstance(implementation);  
    }
    
    List<object> parameters = new List<object>(constructorParameters.Length);
    foreach (ParameterInfo parameterInfo in constructorParameters) 
    {  
      parameters.Add(Resolve(parameterInfo.ParameterType));
    }

    return constructor.Invoke(parameters.ToArray()); 
  }
}

class Program
{
    static void Main(string[] args)
    {
        var ioc = new IoC();
        ioc.Register<ILogger, Logger>();
        ioc.Register<ConsoleLogger, ConsoleLogger>();

        ConsoleLogger objCOnsoleLogger = ioc.Resolve<ConsoleLogger>();       
    }
}

Див. також ред.

Джерела ред.