//public static TInterface CreateHandler<TInterface, THandler>(this IResolver resolver) where TInterface : class where THandler : IInterfaceHandler
        //{
        //    var typeInfo = CreateTypeInfo(typeof(TInterface), typeof(THandler));
        //    var obj = (TInterface)Resolver.CreateInstance(resolver, typeInfo);
        //    return obj;
        //}

        public static TInterface CreateHandler <TInterface, THandler>(this IResolverSession session) where TInterface : class where THandler : IInterfaceHandler
        {
            var typeInfo = CreateTypeInfo(typeof(TInterface), typeof(THandler), session.Resolve <IMethodContextInfoProvider>());
            var obj      = (TInterface)session.CreateInstance(typeInfo);

            return(obj);
        }
        protected virtual Func <IResolverSession, Tuple <TResult, Action> > GetFactory(IResolverSession session)
        {
            lock (this)
            {
                if (Factory != null)
                {
                    return(Factory);
                }

                var constructors = typeInfo.GetConstructors().OrderByDescending(c => c.GetParameters().Length).ToArray();

                foreach (var constructorInfo in constructors)
                {
                    if (session.TryCreateInstance(constructorInfo, out var obj))
                    {
                        var _cinfo = constructorInfo;
                        Factory = (s) =>
                        {
                            s.TryCreateInstance(_cinfo, out var instance);
                            return(new Tuple <TResult, Action>((TResult)instance, null));
                        };

                        return((s) => new Tuple <TResult, Action>((TResult)obj, null));
                    }
                }

                Factory = (s) =>
                {
                    var instance = session.CreateInstance(typeInfo);
                    return(new Tuple <TResult, Action>((TResult)instance, null));
                };
                return(Factory);
            }
        }