public static void UserSenpacService(this IApplicationBuilder app, IHostingEnvironment env, IConfiguration configuration) { var senparcSetting = app.ApplicationServices.GetService <IOptions <SenparcSetting> >().Value; var senparcWeixinSetting = app.ApplicationServices.GetService <IOptions <SenparcWeixinSetting> >().Value; // 启动 CO2NET 全局注册,必须! IRegisterService register = RegisterService.Start(env, senparcSetting) //关于 UseSenparcGlobal() 的更多用法见 CO2NET Demo:https://github.com/Senparc/Senparc.CO2NET/blob/master/Sample/Senparc.CO2NET.Sample.netcore/Startup.cs .UseSenparcGlobal(); //如果需要自动扫描自定义扩展缓存,可以这样使用: //register.UseSenparcGlobal(true); //如果需要指定自定义扩展缓存,可以这样用: //register.UseSenparcGlobal(false, GetExCacheStrategies); //开始注册微信信息,必须! register.UseSenparcWeixin(senparcWeixinSetting); // 从数据库中读取各个租户额配置数据,全部注册 var wechatService = app.ApplicationServices.GetService <IWechatService>(); foreach (var mp in wechatService.GetWechatSettings()) { register.RegisterMpAccount(mp.AppId, mp.AppSecret, mp.AppName); } //除此以外,仍然可以在程序任意地方注册公众号或小程序: //AccessTokenContainer.Register(appId, appSecret, name);//命名空间:Senparc.Weixin.MP.Containers }
public static void FirstRegister <TService, TImplementation>(this IServiceCollection services, RegisterService <TService, TImplementation> registerService) where TService : class where TImplementation : class, TService { IServiceCollection newServicesCollection = new ServiceCollection(); int first = -1; for (int i = 0; i < services.Count; i++) { if (services[i].ServiceType == typeof(TService)) { first = i; break; } } if (first == -1) { registerService(services); } else { foreach (var item in services) { if (first-- == 0) { registerService(newServicesCollection); } newServicesCollection.Add(item); } services.Clear(); foreach (var service in newServicesCollection) { services.Add(service); } } }