public void Register <TBase, TDerived>(KnownCtor knownCtor = null) where TDerived : TBase { if (knownCtor != null) { _registeredItems.Add(typeof(TBase), () => Ctor(typeof(TDerived), knownCtor)); return; } _registeredItems.Add(typeof(TBase), () => Ctor(typeof(TDerived))); }
private object[] GetConstructorParams(KnownCtor knownCtor) { var constructorParams = new List <object>(); foreach (var param in knownCtor.InjectionParams) { if (param is KnownParam knownParam) { constructorParams.Add(Resolve(knownParam.Value)); } else { constructorParams.Add(param); } } return(constructorParams.ToArray()); }
private object Ctor(Type type, KnownCtor knownCtor) { var ctorParams = GetConstructorParams(knownCtor); return(Activator.CreateInstance(type, ctorParams)); }
public void Register <TInstance>(KnownCtor knownCtor = null) { Register <TInstance, TInstance>(knownCtor); }