/// <summary> /// 配置Socket /// </summary> /// <param name="host"></param> /// <param name="configuration"></param> /// <param name="path"></param> /// <returns></returns> public static ServiceHost ConfigureSocket(this ServiceHost host, IConfiguration configuration, string path = null) { var config = configuration.ParseConfiguration <Config.Socket>(path); if (config == null) { throw new NotFoundException("未读取到Socket配置"); } switch (config.ProtocolType) { case ProtocolType.Tcp: var tcpService = new TcpService(configuration.GetConfiguration(path)); host.ConfigureContainer(builder => builder.RegisterInstance(tcpService).SingleInstance()); break; case ProtocolType.Udp: var udpService = new UdpService(configuration.GetConfiguration(path)); host.ConfigureContainer(builder => builder.RegisterInstance(udpService).SingleInstance()); break; default: throw new Exception("未定义的协议类型"); } return(host); }
/// <summary> /// 配置Web服务 /// </summary> /// <param name="host"></param> /// <param name="configuration"></param> /// <param name="configureWebHostBuilder"></param> /// <param name="path"></param> /// <returns></returns> public static ServiceHost ConfigureWeb(this ServiceHost host, IConfiguration configuration, Action <IWebHostBuilder> configureWebHostBuilder, string path = null) { var webService = WebService.Init(host, configuration.GetConfiguration(path), configureWebHostBuilder); host.ConfigureContainer(builder => builder.RegisterInstance(webService).SingleInstance()); return(host); }
/// <summary> /// 配置Quartz /// </summary> /// <param name="host"></param> /// <returns></returns> public static ServiceHost ConfigureQuartz(this ServiceHost host) { host.ConfigureContainer(builder => { builder.RegisterType <QuartzService>().SingleInstance(); builder.RegisterType <DependencyInjectionJobFactory>().SingleInstance(); }); return(host); }
/// <summary> /// 配置雪花生成器 /// </summary> /// <param name="host"></param> /// <param name="workerId"></param> /// <param name="startTime"></param> /// <param name="isGlobal"></param> /// <returns></returns> public static ServiceHost ConfigureSnowflakeGenerator(this ServiceHost host, long workerId, DateTime startTime, bool isGlobal = true) { return(host.ConfigureContainer(builder => { var registration = builder.Register(_ => new SnowflakeGenerator(workerId, startTime)); if (isGlobal) { registration.SingleInstance(); } })); }
/// <summary> /// 注册MemoryCache服务 /// </summary> /// <param name="host"></param> /// <param name="storeCount"></param> /// <param name="isGlobal"></param> /// <returns></returns> public static ServiceHost ConfigureMemoryCache(this ServiceHost host, int storeCount = 6, bool isGlobal = true) { return(host.ConfigureContainer(builder => { var registration = builder.Register(context => new MemoryCache(storeCount)).As <ICache>(); if (isGlobal) { registration.SingleInstance(); } })); }
/// <summary> /// 注册仓储 /// </summary> /// <param name="host"></param> public static void RegisterRepositories(this ServiceHost host) { var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assembly in assemblies) { var types = assembly.GetTypes(); foreach (var type in types) { var attr = type.GetCustomAttribute <RepositoryAttribute>(); if (attr == null) { return; } host.ConfigureContainer(builder => builder.RegisterType(type)); } ; } ; }
static async Task Main(string[] args) { var host = new ServiceHost(); host.ConfigureContainer(b => { b.RegisterType <A>().SingleInstance(); b.RegisterType <Job>(); }); host.ConfigureQuartz(); host.OnHostStarted += async p => { var s = p.GetQuartz(); var ss = await s.CreateSchedulerAsync("X", true); await s.CreateJobAsync <Job>("X", "1/5 * * * * ?"); await ss.Start(); }; await host.RunAsync(); }
/// <summary> /// 配置RabbitMQ /// </summary> /// <param name="host"></param> /// <param name="configuration"></param> /// <param name="path"></param> /// <returns></returns> public static ServiceHost ConfigureRabbitMQ(this ServiceHost host, IConfiguration configuration, string path = null) => host.ConfigureContainer(builder => builder.Register(_ => new RabbitMQService(configuration.GetConfiguration(path))).SingleInstance());
/// <summary> /// 配置SqlSugar /// </summary> /// <param name="host"></param> /// <param name="path"></param> /// <returns></returns> public static ServiceHost ConfigureSqlSugar(this ServiceHost host, string path = null) => host.ConfigureContainer(builder => builder.Register(_ => new SqlSugarService(ServiceHost.GetConfiguration(path))).SingleInstance());