ネイティブDIのASP.NETコア研究では、質量の登録を達成します

オリジナル: ネイティブDI ASP.NET COREは、大量の登録を達成するために学びます

以前Autofac時間を使用し、ちょうどAsImplementInterfaces()は非常に簡単に一括登録機能することができます。内蔵のDIフレームワークasp.netコアは、単純なネイティブDI一括登録機能を実現するために、独自の拡張を書き、考慮にAutofacフレームワークを置き換えるために、やや面倒なプロセスを取って、無容易に利用可能な一括登録方法です

Startup.cs拡張

1  パブリック 静的 クラスStartUpExtenions
 2      {
 3          ///  <まとめ> 
4          /// 一括登録サービス
 。5          ///  </要約> 
6          ///  <PARAM NAME = "サービス"> DIサービス</ PARAM> 
7          // /  <PARAM NAME = "assemblys"> 一括登録組立セット必要</ PARAM>を
8          ///  <PARAM NAME = "baseType"> 基底クラス/インタフェース</ PARAM> 
9          ///  <PARAM NAME =「serviceLifetime 「> サービスのライフサイクル</ PARAM> 
10          ///は <A> </ A>が返し
11          公共の 静的BatchRegisterService IServiceCollection(この IServiceCollectionサービス、アセンブリ[] assemblys、baseTypeタイプ、ServiceLifetime serviceLifetime = ServiceLifetime.Singleton)
 12である         {
 13は              リスト<タイプ> = typelistに新しい新しいリスト<タイプ>();   // すべてのクラスの集合登録条件満たし
14              のforeachをVARのアセンブリassemblys)
 15              {
 16                  // 現在のフィルタアセンブリ修飾クラス
17の                 VARのタイプassembly.GetTypes =()。ここで、(T =>!t.IsInterface &&!t.IsSealed &&!&& t.IsAbstract baseType.IsAssignableFrom(T));
 18は                 IF(!種類= ヌル && types.Count()> 0 19                      typeList.AddRange(タイプ);
20              }
 21              であれば(typeList.Count()== 0 22                  リターンサービス。
23  
24              VAR typeDic = 新しい辞書<タイプ、タイプ[]>(); // 待注册集合
25              のforeachVARのタイプタイプリスト)
 26              {
 27の                 VARのインターフェイス= type.GetInterfaces()。   // 获取接口
28                 typeDic.Add(タイプ、インターフェース);
 29              }
 30              IF(typeDic.Keys.Count()> 0 31である             {
 32                  のforeachVARの instanceType typeDic.Keys)
 33であり                 、{
 34は                     foreachのVARの InterfaceTypeはtypeDic [instanceType])
 35                      {
 36                          // の指定されたライフサイクルに応じてレジスタ
37                          スイッチ(serviceLifetime)
 38である                         {
 39                              ケースServiceLifetime.Scoped:
 40                                  services.AddScoped(InterfaceTypeは、instanceType)。
41                                  ブレーク;
42                              ケースServiceLifetime.Singleton:
 43                                  services.AddSingleton(InterfaceTypeは、instanceType)。
44                                  ブレーク;
45                              ケースServiceLifetime.Transient:
 46                                  services.AddTransient(InterfaceTypeは、instanceType)。
47                                  ブレーク;
48                          }
 49                      }
 50                  }
 51              }
52の             リターンサービス。
53          }
 54      }

 

ConfigureServicesで一括登録プロセスを呼び出します

 1 services.BatchRegisterService(新しいアセンブリ[] {Assembly.GetExecutingAssembly()、Assembly.Load(" Test.DAL ")}、typeof演算(IDependency))。 

 

道によるテストは、登録されたサービスクラスの仕事の延長一括登録を使用します

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/10965633.html