public static IRouteBuilder UseMockServer(this IApplicationBuilder app, MockServerConfig config)
    {
        App = app;
        RouteBuilder routeBuilder = new RouteBuilder(App);

        config.Templates = config.Templates ?? new Dictionary <string, object>();

        foreach (KeyValuePair <string, object> item in config.Templates)
        {
            var name     = item.Key;
            var template = item.Value.ToString();

            Generators[name] = () =>
            {
                IDictionary <string, object> compiled = CompileTemplate(template);
                return(compiled);
            };

            //IDictionary<string, object> sample = Generators[name]();

            //var json = JsonConvert.SerializeObject(sample);
        }

        foreach (KeyValuePair <string, MockServerUrlConfig> kv in config.Resources)
        {
            var url       = kv.Key;
            var urlConfig = kv.Value;

            foreach (var ukv in urlConfig)
            {
                var method = ukv.Key;
                MockServerHttpVerb verb = ukv.Value;
                if (verb.Dynamic)
                {
                    Func <HttpRequest, HttpResponse, RouteData, Task> handler = async(req, resp, route) =>
                    {
                        string content = JsonConvert.SerializeObject(CompileTemplate(verb.Content.ToString(), req, resp, route));

                        await resp.WriteAsync(content);;
                    };

                    routeBuilder.On(method, url, verb.ContentType, handler);
                }
                else
                {
                    routeBuilder.On(method, url, verb);
                }
            }
        }

        routeBuilder.OnGet("/__config", "application/json", (route) =>
        {
            return(config);
        });

        routeBuilder.BuildAndUseRouter();

        return(routeBuilder);
    }