IoC контейнер — Вікіпедія
![](http://upload.wikimedia.org/wikipedia/uk/9/9b/IOC-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80.png)
IoC контейнер — це шаблон проєктування, який дозволяє спростити впровадження залежностей між класами дотримуючись інверсії керування.
Є реалізацією фабричного методу
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>(); } }
- A Basic IoC Container [Архівовано 25 лютого 2020 у Wayback Machine.]
- Define your own ioc container [Архівовано 18 серпня 2016 у Wayback Machine.]