private static async Task Run(Options opts)
        {
            var wellKnownBases = new WellKnownBases(opts.BaseAddresses);

            var pluginLoader = Bootstrapper.LoadPlugins(new[] { opts.AssemblyPath });
            var plugins      = PluginDiscoverer.Discover(pluginLoader.Assemblies);

            var models = new List <RoutingModel>();

            foreach (var plugin in plugins)
            {
                var model = new RoutingModel(plugin.ServiceKey, wellKnownBases, new RoutingModelOptions());
                models.Add(model);

                switch (plugin.ServiceType)
                {
                case ServiceType.MessageHandler:
                    await Bootstrapper.RegisterPluginAsync(model, model, plugin);

                    break;

                case ServiceType.Http:
                    StartWebServer(plugin, model);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            Thread.Sleep(TimeSpan.FromMilliseconds(1500));

            foreach (var model in models)
            {
                await model.StartAsync();
            }

            Console.WriteLine($"Running {string.Join(", ", plugins.Select(x => x.ServiceKey))}... press enter to exit!");
            Console.ReadLine();
        }