DotNetCore跨平台~組件化時代來了


回到目錄

進行dotnetcore之后,各種對象都是基於DI進行生產的,這就有了對象的生命周期一說,早在autofac里也有相關知識點,這與Microsoft.Extensions.DependencyInjection是完全溫和的,方便大家理解,在講今天的組件化之前,先對DI的三種生命周期進行理解一下:

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

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

AddScoped:請求,對象在一個HTTP請求內是唯一的

下面來看今天的組件化的實現,比如我希望對nosql進行封裝,在以后使用它時,直接在代碼startup中進行注冊,或者使用配置文件進行注冊,我們就可以涉及這樣一個擴展方法來實現對IServiceCollection擴展!

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

        /// <summary>
        /// 使用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>());//優先級裝飾器
            services.AddSingleton(option);
            services.AddSingleton<MongodbManager, MongodbManager>();
            return services;
        }
    }

在程序中使用時,也是很方便,注意的是,如果配置文件中也配置它了,我們將以配置文件為准,這樣在生產環境里,你的代碼注入的參數,不用被注釋和刪除!

       #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

感謝各位的閱讀!

我們的框架應該是基於組件化的!

我們的系統應該是基於微服務化的!

我們的部署,應該是基於自動化的!

回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM