如何在ASP.Net Core中使用Lamar

ASP.Net Core内置了对依赖项注入的支持。 实际上,ASP.Net Core开箱即用地带有一个简约的依赖项注入容器。 但是,您也可以在ASP.Net Core中使用第三方依赖项注入容器。

依赖注入是一种设计模式,可促进松散耦合并促进可测试性和维护性。 您可以利用依赖项注入来改进实现,而不必更改使用这些实现的类或接口。

[了解如何在敏捷开发项目中成为出色的Scrum管理员: Scrum管理员角色,解释 •将您的敏捷职业提升到新的水平: 如何提高您的Scrum管理员技能 •不确定“敏捷”的真正含义是什么? InfoWorld 解释了敏捷方法 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

Lamar是流行的控制反转(IoC)容器StructureMap的快速,现代化的后续产品。 本文讨论了如何在ASP.Net Core中使用Lamar。

为什么要使用Lamar进行依赖注入

StructureMap的主要缺点是性能。 Lamar轻巧且快速。 Lamar还具有功能强大的API,使您能够轻松地探索和利用其功能。 Lamar API与StructureMap相似,因此,如果您过去曾使用过StructureMap,则可以轻松使用Lamar。

在ASP.Net Core中设置Lamar非常容易。 我们只需要从NuGet安装必要的程序包,在Program.cs中指定引导代码,然后在Startup.cs文件中添加必要的依赖项,就如同使用ASP.Net Core的默认依赖项注入容器一样。

创建一个ASP.Net Core项目

首先,让我们创建一个ASP.Net Core项目。 如果您的系统已启动并运行Visual Studio 2017,请按照以下步骤在Visual Studio中创建一个新的ASP.Net Core项目。

  1. 启动Visual Studio 2017 IDE。
  2. 单击文件>新建>项目。
  3. 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
  4. 指定项目的名称。
  5. 单击确定保存项目。
  6. 接下来显示一个新窗口“ New .Net Core Web Application…”。
  7. 选择.Net Core作为运行时,并从顶部的下拉列表中选择ASP.Net Core 2.2(或更高版本)。
  8. 选择API作为项目模板。
  9. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
  10. 确保选择“无身份验证”,因为我们也不会使用身份验证。
  11. 单击确定。

这将在Visual Studio中创建一个新的ASP.NET Core项目。 接下来,我们应该安装必要的NuGet软件包,以便在该项目中使用Lamar。

安装Lamar NuGet软件包

要在ASP.Net Core中使用Lamar,您需要在项目中安装Lamar和Lamar.Microsoft.DependencyInjection程序包。 要安装这些软件包,请在“解决方案资源管理器”窗口中右键单击该项目,然后选择“管理NuGet软件包...”。 然后,您可以搜索这些软件包,然后单击“安装”。

lamar asp.net核心 IDG

在ASP.Net Core中使用Lamar所需的两个软件包是Lamar和Lamar.Microsoft.DependencyInjection。

使用NuGet软件包管理器安装这些软件包的替代方法是使用NuGet软件包管理器控制台窗口。 要使用NuGet软件包管理器控制台窗口安装这些软件包,请在控制台中依次输入以下命令。

Install-Package Lamar -Version 2.1.0
Install-Package Lamar.Microsoft.DependencyInjection -Version 2.1.0

创建IDBManager和DBManager类型

在本节中,我们将创建IDBManager和DBManager类型。 以下代码段说明了IDBManager接口,我们将在以后使用该接口进行依赖项注入。

public interface IDBManager
    {
        void Initialize();
        bool Save<T>(T obj);
    }

DBManager类扩展IDBManager接口并实现其方法。

public class DBManager: IDBManager
    {
        public void Initialize()
        {
            //Write some initialization code here
        }
        public bool Save<T>(T obj)
        {
         //Write your code here
            return true;
        }
    }

我们将在本文后面利用IDBManager接口注入依赖项。  

在ASP.Net Core中配置Lamar

包Lamar.Microsoft.DependencyInjection公开了一个称为UseLamar的扩展方法。 调用此扩展方法是为了将Lamar引入应用程序的基础结构。 请参考下面的代码清单,该清单说明了如何实现此目的。

    var builder = new WebHostBuilder();
    builder.UseLamar()
    .UseUrls("http://localhost:50533")
    .UseKestrel()
    .UseStartup<Startup>();
    builder.Start();

接下来,打开文件Program.cs。 下面的代码片段显示了此文件的初始内容,我们将在下一步中对其进行更改。 请注意,当您创建ASP.Net Core项目时,该文件由运行时自动创建。

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

现在,用以下代码替换Program类的源代码(默认情况下,如上所示生成),以引导IWebHostBuilder对象。

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args)
                .UseLamar()
                .UseUrls("http://localhost:50533")
                .Build()
                .Run();
        }
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

在ASP.Net Core中引导Lamar容器

接下来,可以在Startup类的ConfigureServices方法中将服务添加到管道,如下所示。

public void ConfigureServices(IServiceCollection services)
  {
     var container = new Container(x =>
     {
         x.AddTransient<IDBManager, DBManager>();
     });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  }

借助Lamar中的Auto Wiring支持,Lamar可以搜索所需类型和所需类型的构造函数,并构建实例。 下面显示的ConfigureContainer方法说明了如何实现此目的。

public void ConfigureContainer(ServiceRegistry services)
        {
            services.Scan(s =>
            {
                s.TheCallingAssembly();
                s.WithDefaultConventions();
            });
        }

通过依赖项注入在Controller方法中使用DBManager实例

而且,就是这样! 现在,您可以在控制器类中利用DBManager实例。 为此,请右键单击您先前创建的ASP.Net Core项目的Controllers解决方案文件夹。 接下来,将生成的代码替换为以下代码。

    [Route("api/[controller]")]
    [ApiController]
    public class DefaultController : ControllerBase
    {
        private IDBManager _dbManager;
        public DefaultController(IDBManager dbManager)
        {
            _dbManager = dbManager;
        }
     //Other controller methods
     }

ASP.Net Core带有开箱即用的内置依赖项注入容器,但功能有限。 您也可以在ASP.Net Core中轻松使用第三方容器。 Lamar就是这样的一个IoC容器,它是StructureMap IoC容器的快速替代品。

From: https://www.infoworld.com/article/3339698/how-to-use-lamar-in-aspnet-core.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值