<sub id="gqw76"><listing id="gqw76"></listing></sub>
      <sub id="gqw76"><listing id="gqw76"></listing></sub>

    1. <form id="gqw76"><legend id="gqw76"></legend></form>
    2. lms框架模塊詳解

      模塊的定義

      一般地,開發者如果想要在一個自定義的程序集(包)中注冊相關的服務,或者在應用初始化或停止時執行一段自定義的代碼,那么您可能需要將該程序集(包)定義為一個模塊。

      lms框架存在兩種類型的模塊:

      1. 開發者通過繼承LmsModule就可以定義一個普通模塊類;
      2. 也可以通過繼承StartUpModule定義一個服務注冊啟動模塊類。

      例如:

      
      // 普通類型模塊類
      public class CustomHostModule : LmsModule
      {
      }
      
      // 啟動模塊類,只有該類型的模塊才可以被允許在構建服務中被指定為啟動模塊
      [DependsOn(typeof(ZookeeperModule),
              typeof(DotNettyTcpModule),
              typeof(MessagePackModule),
              typeof(RpcProxyModule),
              typeof(TransactionTccModule),
              typeof(AutoMapperModule)
      )]
      public class NormHostModule : StartUpModule
      {
      }
      
      

      ::: tip

      1. 開發者想要執行一個模塊,需要在微服務時指定該模塊,或是通過DependsOn特性直接或是間接的依賴該模塊。

      2. 只有啟動模塊類才可以在服務服務注冊時指定該模塊為注冊的啟動模塊。
        :::

      模塊的依賴關系

      lms框架的模塊通過DependsOn特性指定模塊的依賴關系,lms框架支持通過直接或是間接的依賴模塊。例如: NormHostModule模塊依賴了DotNettyTcpModule模塊,DotNettyTcpModule模塊依賴了RpcModule模塊,微服務注冊時指定NormHostModule為啟動模塊。那么根據模塊依賴關系,RpcModule模塊會被應用加載,并先于DotNettyTcpModuleNormHostModule執行服務注冊方法和初始化方法。

      開發者只需要通過DependsOn特性在類直接就可以指定該模塊依賴的模塊,在應用啟動過程中,會根據模塊的依賴關系進行排序。并完成服務注冊方法和指定的初始化方法。

      例如,NormHostModule的模塊依賴關系如下所示:

          [DependsOn(typeof(ZookeeperModule),
              typeof(DotNettyTcpModule),
              typeof(MessagePackModule),
              typeof(RpcProxyModule),
              typeof(TransactionTccModule),
              typeof(AutoMapperModule)
          )]
          public class NormHostModule : StartUpModule
          {
          }
      

      微服務注冊時指定啟動模塊

      在構建微服務時,需要指定啟動的模塊。

      例如:

      
      private static IHostBuilder CreateHostBuilder(string[] args)
      {
          return Host.CreateDefaultBuilder(args)
                  .RegisterLmsServices<NormHostModule>() //指定啟動的模塊,lms框架約束了該模塊類型必須為啟動模塊類(StartUpModule)
              ;
      }
      
      

      一般地,開發者可以根據微服務類型選擇注冊lms框架默認的模塊,lms框架提供如下三個服務啟動模塊(NormHostModule、WebHostModule、WsHostModule),lms框架給定的默認啟動模塊會幫用戶指定該類型的微服務應用需要依賴哪些模塊。

      開發者如果需要自定義模塊,那么,相應的,開發者需要在模塊依賴關系中聲明依賴該模塊。所以,一般地,如果您需要自定義模塊,那么相應的,您可能需要自定義服務注冊啟動模塊。

      您可以通過繼承StartUpModule或是繼承該lms框架提供的默認啟動服務模塊(NormHostModule、WebHostModule、WsHostModule),定義您的啟動模塊,并在您定義的啟動模塊中依賴您的自定義模塊。

      例如:

      
      [DependsOn(typeof(ZookeeperModule),
              typeof(DotNettyTcpModule),
              typeof(MessagePackModule),
              typeof(RpcProxyModule),
              typeof(TransactionTccModule),
              typeof(AutoMapperModule),
              typeof(CustomHostModule),
      )]
      public class CustomNormHostModule : StartUpModule
      {
      }
      
      // 或是
      
      [DependsOn(typeof(CustomHostModule)
      )] // 模塊的依賴關系也會被繼承
      public class CustomNormHostModule : NormHostModule
      {
      }
      
      

      使用ContainerBuilder 注冊服務

      在定義的模塊中,開發者可以通過重寫RegisterServices方法,通過ContainerBuilder對象進行服務注冊。

      例如:

      protected override void RegisterServices(ContainerBuilder builder)
      {
          builder.RegisterType<MessagePackTransportMessageDecoder>().AsSelf().AsImplementedInterfaces().InstancePerDependency();
          builder.RegisterType<MessagePackTransportMessageEncoder>().AsSelf().AsImplementedInterfaces().InstancePerDependency();
      }
      

      應用初始化方法和停止方法

      開發者可以通過重新自定義模塊的Initialize方法在微服務應用啟動時執行該模塊指定的代碼,通過重寫Shutdown方法在應用停止時執行該模塊指定的代碼。

      public virtual Task Initialize([NotNull]ApplicationContext applicationContext)
      {
          // 微服務應用執行時,指定該端代碼
          return Task.CompletedTask;
      }
      
      public virtual Task Shutdown([NotNull]ApplicationContext applicationContext)
      {
          // 微服務應用停止時,指定該端代碼
          return Task.CompletedTask;
      }
      

      開源地址與文檔

      github: https://github.com/liuhll/lms

      gitee: https://gitee.com/liuhll2/lms

      開發者文檔: http://docs.lms-fk.com/

      posted @ 2021-06-07 17:24  懶小蟲  閱讀(187)  評論(0編輯  收藏  舉報
      最新chease0ldman老人|无码亚洲人妻下载|大香蕉在线看好吊妞视频这里有精品www|亚洲色情综合网

        <sub id="gqw76"><listing id="gqw76"></listing></sub>
        <sub id="gqw76"><listing id="gqw76"></listing></sub>

      1. <form id="gqw76"><legend id="gqw76"></legend></form>