Kararlı bir IoC kütüphanesi için Castle Windsor inceleyiniz.
using System; using System.Collections.Generic; using System.Linq; namespace DIP { class Program { static void Main(string[] args) { var ioc = new SimpleIoC(); ioc.Register<IPrinter, ConsolePrinter>(); ioc.Register<Test, Test>(); var test = ioc.Resolve<Test>(); test.Hello("Ali"); } } interface IPrinter { void Print(string text); } class ConsolePrinter : IPrinter { public void Print(string text) { Console.WriteLine(text); } } class Test { private readonly IPrinter printer; public Test(IPrinter printer) { this.printer = printer; } public void Hello(string name) => printer.Print($"Hello {name}"); } public class SimpleIoC { private readonly Dictionary<Type, Type> _map = new Dictionary<Type, Type>(); public void Register<TFrom, TTo>() => _map.Add(typeof(TFrom), typeof(TTo)); public T Resolve<T>() => (T)Resolve(typeof(T)); private object Resolve(Type type) { Type resolvedType = null; try { resolvedType = _map[type]; } catch (Exception) { throw new ArgumentException($"Couldn't resolve the type {type}"); } var ctor = resolvedType.GetConstructors().First(); var ctorParameters = ctor.GetParameters(); if (ctorParameters.Length == 0) return Activator.CreateInstance(resolvedType); var parameters = new List<object>(); foreach (var parameterToResolve in ctorParameters) { parameters.Add(Resolve(parameterToResolve.ParameterType)); } return ctor.Invoke(parameters.ToArray()); } } }