Esempio n. 1
0
        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);
                }
            }
        }