예제 #1
0
 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)));
 }
예제 #2
0
        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());
        }
예제 #3
0
        private object Ctor(Type type, KnownCtor knownCtor)
        {
            var ctorParams = GetConstructorParams(knownCtor);

            return(Activator.CreateInstance(type, ctorParams));
        }
예제 #4
0
 public void Register <TInstance>(KnownCtor knownCtor = null)
 {
     Register <TInstance, TInstance>(knownCtor);
 }