ASP.Net CoreでLamarを使用する全プロセス


前言
ASP.Net Coreは非常にシンプルなケースを持っています。すなわち、注入容器に依存しています。実際には、第三者の依存注入容器を使って、それを代替することもできます。注入に依存するのは、オブジェクト間の結合を効果的に実現し、ユニットのテストとメンテナンス性を向上させることができます。元々のようにnewオブジェクトが溢れていません。
Lamarは人気があって、効率的で、モジュール化されたIOC容器です。この記事ではASP.Net CoreでLamarを使う方法を検討します。
なぜLamarで依存注入を実現しますか?
NETの世界で最初の依存注入容器は、StructureMapに属するが、StructureMapの最大の欠点は性能の問題であり、本編のLamarは非常に軽量であり、APIを呼び出すために豊富な提供されており、LamarとStructureMapは非常に類似しています。
Lamarを取り付ける
ASP.Net CoreでLamartを使用するには、nugtで次の二つのカバンをインストールする必要があります。
  • Lamar
  • Lamart.Microsoft.DependencyInjection
  • 可視化インターフェースを通して、Manage NuGet Packageができます。

    または以下のコマンドでインストールします。
    
    Install-Package Lamar 
    Install-Package Lamar.Microsoft.DependencyInjection
    
    IDBMannagerとDBManagerを作成します。
    まずIDBMannagerインターフェースクラスを作成し、後続の依存注入用に使用します。コードの定義は以下の通りです。
    
     public interface IDBManager
     {
      void Initialize();
      bool Save<T>(T obj);
     }
    
    次にDBManagerクラスを定義し、インターフェースIDBMannagerを実現します。コードの定義は以下の通りです。
    
     public class DBManager: IDBManager
     {
      public void Initialize()
      {
       //Write some initialization code here
      }
      public bool Save<T>(T obj)
      {
       //Write your code here
       return true;
      }
     }
    
    設定Lamar
    Lamart.Microsoft.DependencyInjectionパッケージは、ASP.Net CoreベースアーキテクチャにLamarを導入する方法を提供しています。次のコードはどのように実現するかを示しています。
    
     public class Program
     {
      public static void Main(string[] args)
      {
       CreateHostBuilder(args).UseLamar().Build().Run();
      }
    
      public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
         webBuilder.UseStartup<Startup>();
        });
     }
    
    
    ランマ容器の配置
    次にConfigreServices()メソッドにContiner容器を配置することができます。コードは以下の通りです。
    
      public void ConfigureServices(IServiceCollection services)
      {
       var container = new Container(x =>
       {
        x.AddTransient<IDBManager, DBManager>();
       });
    
       services.AddControllersWithViews();
      }
    
    
    注目すべきはLamarは強力な自動組立能力を持っています。要求タイプと必要なタイプのコンストラクターを検索して、その必要な例を構築できます。以下のコードはConfigreContiner()方法によってどのように実現されるかを示しています。ここでこの方法をStartupクラスに置いて、完全なコードは以下の通りです。
    
     public class Startup
     {
      // This method gets called by the runtime. Use this method to add services to the container.
      public void ConfigureServices(IServiceCollection services)
      {
       var container = new Container(x =>
       {
        x.AddTransient<IDBManager, DBManager>();
       });
    
       services.AddControllersWithViews();
      }
    
      public void ConfigureContainer(ServiceRegistry services)
      {
       services.Scan(s =>
       {
        s.TheCallingAssembly();
        s.WithDefaultConventions();
       });
      }
     }
    
    
    ControllerにDBManagerを注入した例
    次に、ControllerでDBManagerのインスタンスを注入に依存して取得することができます。実現コードは以下の通りです。
    
     public class HomeController : Controller
     {
      private readonly ILogger<HomeController> _logger;
      private IDBManager _dbManager;
    
      public HomeController(ILogger<HomeController> logger, IDBManager dbManager)
      {
       _logger = logger;
       _dbManager = dbManager;
      }
    
      public IActionResult Index()
      {
       return View();
      }
     }
    
    
    ASP.Net Coreが持っている注入容器はIOCサークルに置いておくと本当に弱いです。第三者が拡張する必要があります。Lamarはこのような非常に優秀なIOC容器で、Structure Mapのとても良い代替品です。
    訳文のリンク:https://www.infoworld.com/article/3339698/how-to-use-lamar-in-aspnet-core.html
    締め括りをつける
    ここではASP.Net CoreでLamarを使った文章について紹介します。ASP.Net CoreはLamarを使っています。以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。