public static InjectorFluent <T> SetResolver <T>(Expression <Func <T> > factoryExpression)
            where T : class
        {
            InternalResolver <T> .SetResolver(factoryExpression);

            return(new InjectorFluent <T>());
        }
        public static InjectorFluent <T> AddPropertyInjector <T, TPropertyType>(this InjectorFluent <T> fluent, Expression <Func <T, TPropertyType> > propertyExpression, Expression <Func <TPropertyType> > setter)
            where T : class
        {
            InternalResolver <T> .AddPropertySetter(propertyExpression, setter);

            return(fluent);
        }
        public static InjectorFluent <T> SetResolver <T>(ConstructorInfo constructor)
            where T : class
        {
            InternalResolver <T> .SetResolver(constructor);

            return(new InjectorFluent <T>());
        }
            /// <summary>
            /// Add property setter for property, use the Resolver to determine the value of the property
            /// </summary>
            /// <typeparam name="TPropertyType"></typeparam>
            /// <param name="propertyExpression"></param>
            public static void AddPropertySetter <TPropertyType>(Expression <Func <T, TPropertyType> > propertyExpression)
                where TPropertyType : class
            {
                Expression <Func <TPropertyType> > setter = () => InternalResolver <TPropertyType> .Resolve();

                AddPropertySetterInner <TPropertyType>(propertyExpression, setter);
            }
        public static InjectorFluent <T> AddPropertyInjector <T, TPropertyType>(Expression <Func <T, TPropertyType> > propertyExpression)
            where T : class
            where TPropertyType : class
        {
            InternalResolver <T> .AddPropertySetter(propertyExpression);

            return(new InjectorFluent <T>());
        }
        public static InjectorFluent <T> SetResolver <T, TConcreteType>()
            where T : class
            where TConcreteType : class, T
        {
            InternalResolver <T> .SetResolver(() => InternalResolver <TConcreteType> .Resolve());

            return(new InjectorFluent <T>());
        }
 public static T Resolve <T>()
     where T : class
 {
     return(InternalResolver <T> .Resolve());
 }