中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

DotNetCore跨平臺~組件化時代來(lai)了

回到目錄

進行dotnetcore之后,各種(zhong)對象都是基于DI進行生(sheng)產的,這(zhe)就有了(le)對象的生(sheng)命周(zhou)期(qi)一(yi)說,早(zao)在autofac里也有相關知(zhi)識點(dian),這(zhe)與Microsoft.Extensions.DependencyInjection是完全溫和的,方便大家(jia)理解(jie),在講今天的組(zu)件化之前,先對DI的三種(zhong)生(sheng)命周(zhou)期(qi)進行理解(jie)一(yi)下:

AddSingleton:單例,進(jin)程內它是唯一的

AddTransient:瞬息,在對象在當前環境內,作用域內是唯一的(de)

AddScoped:請(qing)(qing)求,對象(xiang)在一個HTTP請(qing)(qing)求內是唯一的

下面來看今(jin)天的組件(jian)(jian)化的實現(xian)(xian),比(bi)如(ru)我希望對nosql進(jin)行(xing)封裝,在(zai)以(yi)后使(shi)用它(ta)時(shi),直接在(zai)代(dai)碼startup中進(jin)行(xing)注(zhu)冊,或者使(shi)用配(pei)置文件(jian)(jian)進(jin)行(xing)注(zhu)冊,我們就可以(yi)涉及(ji)這(zhe)樣一個(ge)擴展(zhan)(zhan)方(fang)法來實現(xian)(xian)對IServiceCollection擴展(zhan)(zhan)!

    /// <summary>
    /// nosql服務擴展(zhan)
    /// </summary>
    public static class NoSqlExtensions
    {

        /// <summary>
        /// 使用(yong)Redis
        /// </summary>
        /// <param name="services"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IServiceCollection UseRedis(
           this IServiceCollection services,
           Action<RedisConfig> options = null)
        {
            RedisConfig option = new RedisConfig();
            options?.Invoke(option);
            ObjectMapper.MapperTo<RedisConfig>(option, ConfigFileHelper.Get<RedisConfig>());//優先級裝飾器
            services.AddSingleton(option);
            services.AddSingleton<RedisManager, RedisManager>();
            return services;
        }

        /// <summary>
        /// 使用Mongodb
        /// </summary>
        /// <param name="services"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IServiceCollection UseMongodb(
          this IServiceCollection services,
          Action<MongodbConfig> options = null)
        {
            MongodbConfig option = new MongodbConfig();
            options?.Invoke(option);
            ObjectMapper.MapperTo<MongodbConfig>(option, ConfigFileHelper.Get<MongodbConfig>());//優先級裝飾器(qi)
            services.AddSingleton(option);
            services.AddSingleton<MongodbManager, MongodbManager>();
            return services;
        }
    }

在(zai)程(cheng)序中(zhong)使用(yong)(yong)時,也(ye)是很方便,注意的是,如果配(pei)置(zhi)文(wen)件中(zhong)也(ye)配(pei)置(zhi)它了,我(wo)們將以配(pei)置(zhi)文(wen)件為準,這(zhe)樣在(zai)生產環境里,你的代碼注入的參數,不用(yong)(yong)被(bei)注釋和刪除!

       #region 服務組件
            services.UseRabbitMQ(o =>
            {
                o.ExchangeName = "AutoCalculate";
                o.MqServerHost = "amqp://192.168.200.214:5672";
            });

            services.UseRedis(o =>
            {
                o.Host = "192.168.200.214:6379";
                o.AuthPassword = "2017";
            });

            services.UseDapper(o =>
            {
                o.DbType = 2;
                o.ConnectionString = "test";
            });
            #endregion

感謝各位的閱讀!

我(wo)們的框架(jia)應該是基于(yu)組件(jian)化的!

我們的系統應該是基于(yu)微服務化(hua)的!

我們的部(bu)署,應該(gai)是基于自動化的!

回到目錄

posted @ 2017-11-14 18:35  張占嶺  閱讀(3305)  評論(2)    收藏  舉報