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(); }