IoC контейнер
Перейти до навігації
Перейти до пошуку
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.]