拉马尔怎么在ASP。网络核心项目中使用

  介绍

这篇文章将为大家详细讲解有关拉马尔怎么在ASP。网络核心项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

为什么要用拉马尔实现依赖注入

要说。Net世界最早的依赖注入容器,当属StructureMap,但StructureMap最大的缺点就是性能问题,而本篇的拉马尔则非常轻量级,并提供了丰富的可供调用API,拉马尔和StructureMap非常类似,如果你以前StructureMap玩的溜的话,切到拉马尔上是非常容易的。

安装拉马尔

要想在ASP。网络核心中使用拉马尔,需要通过nuget安装如下两个包。

<李>

拉马尔

<李>

Lamar.Microsoft。李DependencyInjection

你可以通过可视化界面管理NuGet包。

拉马尔怎么在ASP。网络核心项目中使用

或者如下命令进行安装。

Install-Package  Lamar    Install-Package  Lamar.Microsoft。DependencyInjection

创建IDBManager和DBManager

首先创建一个IDBManager接口类,用于后续做依赖注入用,代码定义如下:

, public  interface  IDBManager   ,{   void 才能初始化();   bool 才能;Save< T> (T  obj);   以前,}

接下来定义DBManager类并实现接口IDBManager,代码定义如下:

, public  class  DBManager: IDBManager   ,{   public 才能;void 初始化()   {才能   ,,//Write  some  initialization  code 这里   ,,}   public 才能bool  Save< T> (T  obj)   {才能   ,,//Write  your  code 这里   ,,return 真实;   ,,}   以前,}

配置拉马尔

Lamar.Microsoft。DependencyInjection包提供了一个UseLamar()方法能够将拉马尔引入到ASP。网络核心基础架构中、下面的代码展示了如何去实现。

, public  class 程序   ,{   public 才能;static  void  Main (string [], args)   {才能   ,,CreateHostBuilder (args) .UseLamar () .Build () .Run ();   ,,}      public 才能static  IHostBuilder  CreateHostBuilder (string [], args),=比;   ,,Host.CreateDefaultBuilder (args)   ,,,.ConfigureWebHostDefaults (webBuilder =比;   ,,,{   ,,,,webBuilder.UseStartup ();   ,,,});   以前,}

配置拉马尔容器

接下来可以在ConfigureServices()方法中配置容器容器,代码如下:

,, public  void  ConfigureServices (IServiceCollection 服务)   {才能   ,,var  container =, new 容器(x =比;   ,,{   ,,,x.AddTransient ();   ,,});      ,,services.AddControllersWithViews ();   以前,,}

值得注意的是拉马尔拥有强大的自动装配能力,它可以搜索请求类型和所需类型的构造函数,并构建其需要的实例,下面的代码展示了如何通过ConfigureContainer()方法去实现,这里我将该方法放在启动类中,完整代码如下:

, public  class 启动   ,{//才能,却;能够method  gets  nbsp; by 从而运行时只Use 却;能够method 用add  services 用,容器。   public 才能;void  ConfigureServices (IServiceCollection 服务)   {才能   ,,var  container =, new 容器(x =比;   ,,{   ,,,x.AddTransient ();   ,,});      ,,services.AddControllersWithViews ();   ,,}      public 才能;void  ConfigureContainer (ServiceRegistry 服务)   {才能   ,,services.Scan (s =比;   ,,{   ,,,s.TheCallingAssembly ();   ,,,s.WithDefaultConventions ();   ,,});   ,,}   以前,}

控制器中注入DBManager实例

接下来就可以在控制器中通过依赖注入的方式获取DBManager实例啦,实现代码如下:

, public  class  HomeController :控制器   ,{   private 才能readonly  ILogger< HomeController>, _logger;   private 才能;IDBManager  _dbManager;      public 才能;HomeController (ILogger拉马尔怎么在ASP。网络核心项目中使用