public object CreateImplementation(Dependancy dependancy, Func <Type, object> factory) { if (dependancy.Implemented) { return(dependancy.Implementation); } object implementation = factory(dependancy.Type); if (dependancy.Lifetimes == DependancyLifetimes.Transient) { dependancy.AddImplementaion(implementation); } return(implementation); }
private object GetService(Type type) { Dependancy dependancy = _container.GetDependancy(type); ConstructorInfo constructor = dependancy.Type.GetConstructors().Single(); ParameterInfo[] parameters = constructor.GetParameters().ToArray(); if (parameters.Length > 0) { object[] parameterImplementations = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { parameterImplementations[i] = GetService(parameters[i].ParameterType); } return(CreateImplementation(dependancy, t => Activator.CreateInstance(t, parameterImplementations))); } return(CreateImplementation(dependancy, t => Activator.CreateInstance(t))); }