在ASP.Net Core中使用Lamar的全过程
前言
ASP.NetCore自带了一个极简的开箱即用的依赖注入容器,实际上,你还可以使用第三方的依赖注入容器来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和维护性,你可以使用依赖注入来改进你的代码设计,而不像原来那样到处都是new对象。
Lamar是一个流行的,高效的,模块化的IOC容器,这篇文章我们将会讨论如何在ASP.NetCore中使用Lamar。
为什么要用Lamar实现依赖注入
要说.NET世界最早的依赖注入容器,当属StructureMap,但StructureMap最大的缺点就是性能问题,而本篇的Lamar则非常轻量级,并提供了丰富的可供调用API,Lamar和StructureMap非常类似,如果你以前StructureMap玩的溜的话,切到Lamar上是非常容易的。
安装Lamar
要想在ASP.NetCore中使用Lamar,需要通过nuget安装如下两个包。
- Lamar
- Lamar.Microsoft.DependencyInjection
你可以通过可视化界面ManageNuGetPackages。
或者如下命令进行安装。
Install-PackageLamar Install-PackageLamar.Microsoft.DependencyInjection
创建IDBManager和DBManager
首先创建一个IDBManager接口类,用于后续做依赖注入用,代码定义如下:
publicinterfaceIDBManager { voidInitialize(); boolSave(Tobj); }
接下来定义DBManager类并实现接口IDBManager,代码定义如下:
publicclassDBManager:IDBManager { publicvoidInitialize() { //Writesomeinitializationcodehere } publicboolSave(Tobj) { //Writeyourcodehere returntrue; } }
配置Lamar
Lamar.Microsoft.DependencyInjection包提供了一个UseLamar()方法能够将Lamar引入到ASP.NetCore基础架构中,下面的代码展示了如何去实现。
publicclassProgram { publicstaticvoidMain(string[]args) { CreateHostBuilder(args).UseLamar().Build().Run(); } publicstaticIHostBuilderCreateHostBuilder(string[]args)=> Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder=> { webBuilder.UseStartup(); }); }
配置Lamar容器
接下来可以在ConfigureServices()方法中配置Container容器,代码如下:
publicvoidConfigureServices(IServiceCollectionservices) { varcontainer=newContainer(x=> { x.AddTransient(); }); services.AddControllersWithViews(); }
值得注意的是Lamar拥有强大的自动装配能力,它可以搜索请求类型和所需类型的构造函数,并构建其需要的实例,下面的代码展示了如何通过ConfigureContainer()方法去实现,这里我将该方法放在Startup类中,完整代码如下:
publicclassStartup { //Thismethodgetscalledbytheruntime.Usethismethodtoaddservicestothecontainer. publicvoidConfigureServices(IServiceCollectionservices) { varcontainer=newContainer(x=> { x.AddTransient(); }); services.AddControllersWithViews(); } publicvoidConfigureContainer(ServiceRegistryservices) { services.Scan(s=> { s.TheCallingAssembly(); s.WithDefaultConventions(); }); } }
Controller中注入DBManager实例
接下来就可以在Controller中通过依赖注入的方式获取DBManager实例啦,实现代码如下:
publicclassHomeController:Controller { privatereadonlyILogger_logger; privateIDBManager_dbManager; publicHomeController(ILogger logger,IDBManagerdbManager) { _logger=logger; _dbManager=dbManager; } publicIActionResultIndex() { returnView(); } }
ASP.NetCore自带的依赖注入容器放在IOC圈子里来说那真是太弱了,太需要第三方来扩充了,Lamar就是这样一款非常优秀的IOC容器,也是StructureMap非常好的替代品。
译文链接:https://www.infoworld.com/article/3339698/how-to-use-lamar-in-aspnet-core.html
总结
到此这篇关于在ASP.NetCore中使用Lamar的文章就介绍到这了,更多相关ASP.NetCore使用Lamar内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。