如何在 ASP.Net Core 中使用 Lamar

ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和维护性,你可以使用 依赖注入 来改进你的代码设计,而不像原来那样到处都是 new 对象。

Lamar 是一个流行的,高效的,模块化的 IOC 容器,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 Lamar。

为什么要用 Lamar 实现依赖注入

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

安装 Lamar

要想在 ASP.Net Core 中使用 Lamar,需要通过 nuget 安装如下两个包。

  • Lamar

  • Lamar.Microsoft.DependencyInjection

你可以通过可视化界面 Manage NuGet Packages

或者如下命令进行安装。


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

创建 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 herereturn true;}}

配置 Lamar

Lamar.Microsoft.DependencyInjection 包提供了一个 UseLamar() 方法能够将 Lamar 引入到 ASP.Net Core 基础架构中,下面的代码展示了如何去实现。

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>();});}

配置 Lamar 容器

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

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

值得注意的是 Lamar 拥有强大的 自动装配 能力,它可以搜索请求类型和所需类型的构造函数,并构建其需要的实例,下面的代码展示了如何通过 ConfigureContainer() 方法去实现,这里我将该方法放在 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 容器,也是 StructureMap 非常好的替代品。

译文链接:https://www.infoworld.com/article/3339698/how-to-use-lamar-in-aspnet-core.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扎克伯格做了26张PPT,员工效率提10倍,已被疯狂传阅!

1、时间常有&#xff0c;时间在于优先。2、时间总会有的&#xff1a;每天只计划 4&#xff5e;5 小时真正的工作。3、当你在状态时&#xff0c;就多干点&#xff1b;不然就好好休息&#xff1a;有时候会连着几天不是工作状态&#xff0c;有时在工作状态时却又能天天忙活 12 小时…

2010南非世界杯32强手绘海报

2010南非世界杯32强手绘海报 2010年南非世界杯已经进入最后的倒计时&#xff0c;近日&#xff0c;ESPN推出了一组以世界杯32强为主题的手绘海报。在这组颇有漫画性质的海报中&#xff0c;32强每支球队的特点都是展现得淋淋尽致&#xff0c;卡卡、梅西、C罗、托雷斯等球星也自然…

jsp后台批量导入excel表格数据到mysql中_PHP批量导入excell表格到mysql数据库

PHP批量导入excell表格到mysql数据库,本人通过亲自测试&#xff0c;在这里分享给大家1&#xff0c;下载 php excell类库网上搜索可以下载&#xff0c;这里不写地址2&#xff0c;建html文件请选择你要上传的EXCELL:excell下载模板请选择你要上传的excell:3,php代码写入//批量上…

鹅厂二面,Nginx回忆录

上周二面鹅厂&#xff0c;面试官问出了“nginx你了解吗&#xff1f;”这样宽泛直白的句式&#xff0c;我一时抓不到重点&#xff0c;一时语噻。下班想了一下&#xff0c;平时潜移默化用到不少nginx的能力&#xff0c;但在面试的时候没有吹成对应的概念。面谈nginx核心能力nginx…

nagios监控mysql主机,nginx,cpu,网卡流量

nagios安装完成&#xff0c;打开/usr/local/nagios/etc/nagios.cfg去掉cfg_dir/usr/local/nagios/etc/servers前面的#号&#xff0c;并创建/usr/local/nagios/etc/servers目录&#xff08;此目录下放被监控机的配置文件&#xff09;&#xff0c;重启nagios服务service nagios r…

干货|吴恩达Coursera课程教你学习神经网络二!

上一周的课程中讲了神经网络的结构以及正向传播(feed forward)过程&#xff0c;了解了神经网络是如何进行预测的&#xff0c;但是预测的结果怎么和真是结果进行比较以及发现了错误如何修改还没有提及。这一周的课程中&#xff0c;介绍了cost function作为结果比较的标准以及bac…

vue预加载动态生成runtime.js_预渲染 prerender-spa-plugin 避坑指南

预渲染原理在webpack打包结束并生成文件后&#xff08;after-emit hook&#xff09;&#xff0c;会启动一个server模拟网站的运行&#xff0c;用puppeteer&#xff08;google官方的headless 无头浏览器浏览器&#xff09;访问指定的页面route&#xff0c;得到相应的html结构&am…

Dotnet的数据定位和匹配

Dotnet里&#xff0c;数据定位和匹配的相关编程现在变得很舒服。最近项目紧&#xff0c;还要不停出差。所以&#xff0c;写个短点的、最近经常用到的内容&#xff1a;数据定位和匹配。数据定位假设我们有这样一个数组&#xff1a;var array new int[] { 1, 2, 3, 4, 5, 6, 7, …

一年后,我又来了

差不多一年没有更新过博客了&#xff0c;这一年&#xff0c;怀孕生子&#xff0c;人变懒惰了&#xff0c;不想思考。在家休假也大半年了&#xff0c;颓废&#xff0c;什么也没干。现在宝宝已经两个多月了&#xff0c;没多久也要上班了&#xff0c;生活也逐渐走上正轨&#xff0…

mysql怎么存照片信息_mysql怎么存储图片信息?

方法一&#xff1a;把照片放进数据库&#xff0c;照片的格式最好是bmp&#xff0c;这样就可以在窗体上显示出来&#xff0c;不过这样数据库的体积会暴增。详细的使用方法请参考Access帮助中的 PictureData 属性(本文末尾有相关帮助)。而且&#xff0c;你可以直接用 commdlg API…

使用 .NET CLI 构建项目脚手架

前言在微服务场景中&#xff0c;开发人员分配到不同的小组&#xff0c;系统会拆分为很多个微服务&#xff0c;有一点是&#xff0c;每个项目都需要单元测试&#xff0c;接口文档&#xff0c;WebAPI接口等&#xff0c;创建新项目这些都是重复的工作&#xff0c;而且还要保证各个…

.net 垃圾回收机制

尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(Garbage Collection)&#xff0c;但是我们还是应该了解它们&#xff0c;以优化我们的应用程序。同时&#xff0c;还需要具备一些基础的内存管理工作机制的知识&#xff0c;这样能够有助于解释我们日常程序编写中的变…

《自然》杂志:中国人越来越沉迷于对着一个叫“区块链”的东西胡言乱语

起初&#xff0c;《自然》杂志以为在2018年春节前后中国发生了一场瘟疫&#xff0c;但很快就改变了这一看法。除了精神亢奋无法入睡&#xff0c;那里的人们身体还算健康。不过&#xff0c;他们越来越沉迷于对着一个叫“区块链”的东西胡言乱语&#xff0c;根本停不下来。因为教…

python if 跳出_Python保留字简单释义

作者&#xff1a;小小程序员链接&#xff1a;https://zhuanlan.zhihu.com/p/87393696来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。Guido van Rossum在1991年正式对外发布Python版本&#xff0c;现在已成为最流行的语言…

客官,.NETCore无代码侵入的模型验证了解下

.NETCore下的模型验证相信绝大部分的.NET开发者或多或少的都用过&#xff0c;微软官方提供的模型验证相关的类位于System.ComponentModel.DataAnnotations命令空间下&#xff0c;在使用的时候只需要给属性添加不同的特性即可实现对应的模型验证。如下所示&#xff1a;public cl…

敏捷个人:提供更多文档下载,并转载一篇敏捷个人读书笔记

这两周一直忙着OpenExpressApp的自动化测试支持了&#xff0c;对于敏捷个人最近在思考作为新手如何学习的问题&#xff0c;后期我会写篇blog与大家分享一下。在敏捷个人项目中我发布了敏捷个人&#xff0d;认识自我&#xff0c;管理自我.pdf&#xff0c;有很多朋友之前看过&…

大数据揭秘:低学历者发财的概率有多大?结果很吃惊

先看两幅图&#xff1a;Table 1: Mean Earnings by Highest Degree Earned, $: 2009 (SAUS, table 232)Table 2: Unemployment Rates by Educational Attainment图一是美国社会收入和最高学历的关系&#xff0c;图二是美国社会失业率和受教育程度的关系&#xff0c;数据来自SAU…

多个cpp文件生成so_boostpython:从多个.cpp文件创建一个模块(.so)

我开始在C中编写一些我想在Python代码中调用的模块。为此&#xff0c;我使用boostpython。随着代码的增长&#xff0c;我决定将其分成几个.cpp文件。现在&#xff0c;我有了这样的东西&#xff1a;食品.cpp#include "Bar.hpp"#include "Baz.hpp"#include u…

SSH远程终端连接数问题

系统 linux &#xff08;Debian&#xff09; 存在问题&#xff1a;SSH终端连接数最大为10个 解决方案&#xff1a; 1) 修改/etc/ssh/sshd_config中#MaxStartups 10:30:60&#xff0c;将其改为MaxStartups 1000 2) 重启SSH服务&#xff0c;/etc/init.d/ssh restar…