public static void RegisterPerWebRequest <TService>(
            this Container container,
            Func <TService> instanceCreator) where TService : class
        {
            var creator = new PerWebRequestInstanceCreator <TService>(instanceCreator);

            container.Register(creator.GetInstance);
        }
        public static void RegisterPerWebRequest <TConcrete>(this Container container)
            where TConcrete : class
        {
            container.Register <TConcrete>();

            container.ExpressionBuilt += (sender, e) =>
            {
                if (e.RegisteredServiceType != typeof(TConcrete))
                {
                    return;
                }

                var transientInstanceCreator = Expression.Lambda <Func <TConcrete> >(
                    e.Expression, new ParameterExpression[0]).Compile();

                var creator = new PerWebRequestInstanceCreator <TConcrete>(
                    transientInstanceCreator);

                e.Expression = Expression.Call(Expression.Constant(creator),
                                               creator.GetType().GetMethod("GetInstance"));
            };
        }