public OverkillConfigurationMenu(OverkillConfiguration overkillConfiguration, string name = null) : base(name, overkillConfiguration) { if (name == null) { this.Name = "Overkill Scorer"; } this.Config = overkillConfiguration; }
static void Main(string[] args) { Console.WriteLine("Overkill is initializing"); OverkillConfiguration config = new OverkillConfiguration(); AppDomain.CurrentDomain.AssemblyResolve += (sender, evt) => { var assemblyFile = evt.Name.Contains(",") ? evt.Name.Substring(0, evt.Name.IndexOf(",")) : evt.Name; assemblyFile += ".dll"; var absoluteFolder = new FileInfo((new Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath).Directory.FullName; var targetPath = Path.Combine(absoluteFolder, assemblyFile); try { return(Assembly.LoadFile(targetPath)); } catch (Exception) { return(null); } }; var host = new HostBuilder() .ConfigureAppConfiguration(configurationBuilder => { configurationBuilder .AddJsonFile("configuration.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .Build(); }) .ConfigureServices((hostContext, services) => { Console.WriteLine("Registering services"); hostContext.Configuration.Bind(config); Boot.SetupConfiguration(config); Boot.LoadVehicleDriverWithDependencies(services); Boot.LoadPluginsWithDependencies(services); //Core services.AddSingleton <IOverkillConfiguration>(_ => new OverkillConfiguration(config)); services.AddSingleton <IInputService, InputService>(); services.AddSingleton <IPubSubService, PubSubService>(); services.AddSingleton <IVideoTransmissionService, FFmpegVideoTransmissionService>(); //Positioning - optional, configurable if (config.Positioning.Enabled) { switch (config.Positioning.Type) { case PositioningSystem.QuectelCM: services.AddSingleton <IPositioningService, QuectelModemPositioningService>(); break; } } //Connection protocol - configurable switch (config.VehicleConnection.Type) { case CommunicationProtocol.TCP: services.AddSingleton <IConnectionInterface, TcpConnectionInterface>(); break; case CommunicationProtocol.GPIO: services.AddSingleton <IConnectionInterface, GpioConnectionInterface>(); break; } //Proxies services.AddSingleton <IHttpProxy, HttpProxy>(); services.AddSingleton <IProcessProxy, ProcessProxy>(); services.AddSingleton <IFilesystemProxy, FilesystemProxy>(); services.AddSingleton <ISoundPlayerProxy, SoundPlayerProxy>(); services.AddSingleton <IThreadProxy, ThreadProxy>(); services.AddSingleton <ISerialProxy, SerialProxy>(); //Services services.AddSingleton <IAudioService, AudioService>(); services.AddSingleton <INetworkingService, NetworkingService>(); services.AddSingleton <ILoggingService, LoggingService>(); //Audio services.AddSingleton <ISoundOut, WaveOut>(x => new WaveOut() { Device = WaveOutDevice.DefaultDevice }); //Websockets services.AddSingleton <IWebsocketService, WebsocketService>(); Console.WriteLine("Done registering services"); }) .UseConsoleLifetime() .Build(); using (var serviceScope = host.Services.CreateScope()) { var services = serviceScope.ServiceProvider; //Do the actual bootup and run/initialize things Boot.SetupServiceProvider(services); Boot.LoadTopics(); Boot.LoadConfiguredServices(); Boot.Finish(); Console.ReadKey(true); } }