<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Util應用框架核心(一) - 服務配置

      本文介紹在項目中如何配置 Util 依賴服務.

      文章分為多個小節,如果對設計原理不感興趣,只需要閱讀基礎用法部分即可.

      基礎用法

      Asp.Net Core 項目服務配置

      調用 WebApplicationBuilder 實例的 AsBuild 方法, 并以鏈式調用Util服務擴展.

      范例

      var builder = WebApplication.CreateBuilder( args );
      builder.AsBuild()
        .AddAop()
        .AddUtc()
        .AddSerilog()
        .AddSqlServerUnitOfWork<IDemoUnitOfWork,DemoUnitOfWork>( builder.Configuration.GetConnectionString( "DefaultConnection" ) )
        .AddUtil();
      

      控制臺項目服務配置

      調用 IHostBuilder 實例的 AsBuild 方法, 并以鏈式調用Util服務擴展.

      范例

      Host.CreateDefaultBuilder( args )
        .AsBuild()
        .AddSerilog()
        .AddUtil()
        .Build()
        .Run();
      

      設計動機

      .Net 默認的服務配置方式是在 IServiceCollection 實例調用服務擴展方法.

      下面的代碼用于添加Asp.Net Core Web Api控制器服務.

      var builder = WebApplication.CreateBuilder( args );
      builder.Services.AddControllers();
      

      .Net 在 IServiceCollection 上擴展了大量的服務配置方法.

      不僅如此,第三方類庫也會添加自己的服務擴展到 IServiceCollection .

      最少記憶原則是應用框架設計原則之一.

      應用框架的封裝,應盡量減少開發人員需要記憶的內容.

      代碼提示能夠幫助開發人員記憶.

      大量的擴展方法降低了代碼提示的作用,在不看文檔的情況下,你很難知道哪些服務擴展是 Util應用框架相關的.

      Util應用框架定義了用來專門聚集服務配置的接口 IAppBuilder,從而將Util應用框架提供的服務配置方法從 IServiceCollection 分離出來.

      AsBuild 方法返回 IAppBuilder 實例,現在你只需有個模糊的印象就能調用Util應用框架提供的服務配置方法.

      源碼解析

      AppBuilder

      AppBuilder 是 IHostBuilder 的簡單包裝.

      /// <summary>
      /// 應用生成器
      /// </summary>
      public interface IAppBuilder {
          /// <summary>
          /// 主機生成器
          /// </summary>
          public IHostBuilder Host { get; }
          /// <summary>
          /// 構建
          /// </summary>
          public IHost Build();
      }
      
      /// <summary>
      /// 應用生成器
      /// </summary>
      public class AppBuilder : IAppBuilder {
          /// <summary>
          /// 初始化應用生成器
          /// </summary>
          /// <param name="host">主機生成器</param>
          public AppBuilder( IHostBuilder host ) {
              Host = host ?? throw new ArgumentNullException( nameof( host ) );
          }
      
          /// <inheritdoc />
          public IHostBuilder Host { get; }
      
          /// <summary>
          /// 構建
          /// </summary>
          public IHost Build() {
              return Host.Build();
          }
      }
      

      AsBuild擴展方法

      已為 IHostBuilderWebApplicationBuilder 添加 AsBuild擴展方法.

      /// <summary>
      /// 主機生成器服務擴展
      /// </summary>
      public static class IHostBuilderExtensions {
          /// <summary>
          /// 轉換為Util應用生成器
          /// </summary>
          /// <param name="hostBuilder">主機生成器</param>
          public static IAppBuilder AsBuild( this IHostBuilder hostBuilder ) {
              hostBuilder.CheckNull( nameof( hostBuilder ) );
              return new AppBuilder( hostBuilder );
          }
      }
      
      /// <summary>
      /// Web應用生成器擴展
      /// </summary>
      public static class WebApplicationBuilderExtensions {
          /// <summary>
          /// 轉換為Util應用生成器
          /// </summary>
          /// <param name="builder">Web應用生成器</param>
          public static IAppBuilder AsBuild( this WebApplicationBuilder builder ) {
              builder.CheckNull( nameof( builder ) );
              return new AppBuilder( builder.Host );
          }
      }
      

      服務配置擴展

      當 Util 應用框架內置功能無法滿足你的需求時,可以自行擴展.

      如果擴展功能需要進行配置,可以擴展到 IAppBuilder,以方便調用.

      創建 AppBuilderExtensions 靜態類, 為 IAppBuilder 添加服務擴展方法.

      約定,服務配置名稱應以 Add 開頭.

      IAppBuilder 可以獲取 IHostBuilder 實例,調用它的 ConfigureServices 方法進行配置.

      服務配置擴展范例

      /// <summary>
      /// 業務鎖操作擴展
      /// </summary>
      public static class AppBuilderExtensions {
          /// <summary>
          /// 配置業務鎖
          /// </summary>
          /// <param name="builder">應用生成器</param>
          public static IAppBuilder AddLock( this IAppBuilder builder ) {
              builder.CheckNull( nameof( builder ) );
              builder.Host.ConfigureServices( ( context, services ) => {
                  services.TryAddTransient<ILock, DefaultLock>();
              } );
              return builder;
          }
      }
      
      posted @ 2023-10-29 14:16  何鎮汐  閱讀(525)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产仑乱无码内谢| 人妻中文字幕一区二区视频| 精品中文人妻在线不卡| 国产熟睡乱子伦午夜视频| 亚洲精品无码久久一线| 亚洲欧美偷国产日韩| 国产a在视频线精品视频下载| 色香欲天天影视综合网| 精品视频国产狼友视频| 色综合视频一区二区三区| 四虎亚洲精品高清在线观看 | 精品国产乱一区二区三区| 无码人妻丝袜在线视频红杏| 亚洲精品国模一区二区| 亚洲第一无码AV无码专区| 日韩精品理论片一区二区| 91精品91久久久久久| 给我播放片在线观看| 亚洲精品国产一二三区| 欧美亚洲另类 丝袜综合网| 怀仁县| 亚洲国产一区二区精品专| 一本色道久久加勒比综合 | 精品不卡一区二区三区| 国产亚洲色视频在线| 欧美熟妇xxxxx欧美老妇不卡| 精品国产一区二区三区大| 一区二区中文字幕av| 国产精品∧v在线观看| 欧美成人午夜在线观看视频| 国内精品免费久久久久电影院97| 国产99视频精品免费专区| 99久久国产综合精品成人影院| 亚洲av首页在线| 国产精品亚洲五月天高清| 国产欧美一区二区日本加勒比 | 国产免费又黄又爽又色毛| 亚洲18禁私人影院| 国产成人精品亚洲日本片| 皋兰县| 国产对白老熟女正在播放|