private static CompositionRoot CreateCompositionRoot(
            IApplicationBuilder applicationBuilder,
            ConfigureCompositionRoot configureCompositionRoot)
        {
            var distributedCache = ResolveApplicationService <IDistributedCache>(applicationBuilder);

            return(configureCompositionRoot(new CompositionRootBuilder())
                   .SessionStorage(new Internal.Storage(distributedCache))
                   .Build());
        }
        public static IApplicationBuilder UseSession(
            this IApplicationBuilder applicationBuilder,
            ConfigureCompositionRoot configureCompositionRoot)
        {
            var compositionRoot        = CreateCompositionRoot(applicationBuilder, configureCompositionRoot);
            var createLifecycleHandler = new SessionMiddleware.CreateSessionLifecycleHandler(
                compositionRoot.CreateSessionLifeCycleHandler);
            var loggerFactory = ResolveApplicationService <ILoggerFactory>(applicationBuilder);
            var logger        = loggerFactory.CreateLogger <SessionMiddleware>();

            return(applicationBuilder.UseMiddleware <SessionMiddleware>(logger, createLifecycleHandler));
        }