public static T CreateController <T>(this TestApplication app) where T : ControllerBase
        {
            var httpContext = app.GetService <IHttpContextFactory>().Create(new DefaultHttpContext().Features);

            httpContext.User = app.User;

            var routeData = new RouteData();

            routeData.Routers.Add(new FakeRoute(app.GetService <IInlineConstraintResolver>()));

            var actionContext = new ActionContext(
                httpContext,
                routeData,
                new ControllerActionDescriptor
            {
                ControllerTypeInfo = typeof(T).GetTypeInfo()
            });

            var actionContextAccessor = app.GetService <IActionContextAccessor>();

            if (actionContextAccessor != null)
            {
                actionContextAccessor.ActionContext = actionContext;
            }
            return(app.GetService <IControllerFactory>().CreateController(new ControllerContext(actionContext)) as T);
        }
        //public static AdminUser MockAdminUser(this TestApplication app)
        //{
        //    var adminUserRepo = app.GetService<IRepository<AdminUser>>();
        //    var adminUserService = app.GetService<IAdminUserService>();

        //    var adminUser = new AdminUser
        //    {
        //        CreatedAtUtc = DateTime.UtcNow.AddDays(-1),
        //        Username = "******",
        //        HashedPassword = adminUserService.HashPassword("11111A")
        //    };
        //    adminUserRepo.Save(adminUser);

        //    var token = adminUserService.IssueJwtToken(adminUser);
        //    var options =  app.GetService<IOptionsMonitor<JwtBearerOptions>>().Get("Bearer");
        //    var identity = options.SecurityTokenValidators
        //                          .First()
        //                          .ValidateToken(token.TokenString, options.TokenValidationParameters, out _);
        //    app.User = identity;
        //    return adminUser;
        //}

        public static ModelStateDictionary ValidateModel(this TestApplication app, object model)
        {
            var validator     = app.GetService <IObjectModelValidator>();
            var actionContext = new ActionContext();

            validator.Validate(actionContext, null, string.Empty, model);

            return(actionContext.ModelState);
        }