private void RegisterApplicationComponents(IApplicationBuilder app, ILoggerFactory loggerFactory)
        {
            container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

            // Register application services
            container.RegisterMvcControllers(app);
            container.RegisterMvcViewComponents(app);

            container.Register <IUserService, AspNetUserService>(Lifestyle.Scoped);
            container.Register <CustomMiddleware>();

            // Cross-wire required framework services
            container.RegisterSingleton <Func <IViewBufferScope> >(() => AspNetCoreExtensions.GetRequestService <IViewBufferScope>(app));
            container.RegisterSingleton(loggerFactory);

            container.Verify();
        }
        public void GetRequestUri(string scheme, string host, int?port, string pathBase, string path, string queryString)
        {
            // Given
            if (scheme != null)
            {
                httpRequest.Setup(x => x.Scheme).Returns(scheme);
            }
            if (host != null)
            {
                httpRequest.Setup(x => x.Host).Returns(new HostString(host, port ?? 80));
            }
            if (pathBase != null)
            {
                httpRequest.Setup(x => x.PathBase).Returns(pathBase);
            }
            if (path != null)
            {
                httpRequest.Setup(x => x.Path).Returns(path);
            }
            if (queryString != null)
            {
                httpRequest.Setup(x => x.QueryString).Returns(new QueryString(queryString));
            }

            // When
            string uri = AspNetCoreExtensions.GetRequestUri(httpRequest.Object);

            // Then
            string expected = string.Concat(
                scheme,
                (scheme != null ? "://" : ""),
                host,
                (port != null) ? $":{port}" : "",
                pathBase,
                path,
                queryString
                );
            string obtained = uri;

            Assert.Equal(expected, obtained);
        }