本文转载请联系码农阅读公众号。ASP.NetCore带有一个最小的开箱即用的依赖注入容器。其实也可以使用第三方的依赖注入容器来代替。依赖注入是一种可以有效实现的设计模式。对象之间的解耦有利于提高单元测试和可维护性。您可以使用依赖注入来改进您的代码设计,而不是到处都是新对象。Lamar是一个流行的、高效的、模块化的IOC容器。在本文中,我们将讨论如何在ASP.NetCore中使用Lamar。为什么要用Lamar来实现依赖注入?.NET世界最早的依赖注入容器是StructureMap,但是StructureMap最大的缺点就是性能问题。本文中的Lamar非常轻量级,并提供了丰富的可调用API,Lamar和StructureMap非常相似,如果你以前玩过StructureMap,那么转用Lamar是很容易的。安装Lamar要在ASP.NetCore中使用Lamar,需要通过nuget安装以下两个包。LamarLamar.Microsoft.DependencyInjection您可以通过可视化界面管理NuGet包。或以下命令安装。Install-PackageLamarInstall-PackageLamar.Microsoft.DependencyInjection创建IDBManager和DBManager首先创建一个IDBManager接口类,用于后续的依赖注入。代码定义如下:publicinterfaceIDBManager{voidInitialize();boolSave(Tobj);}接下来定义DBManager类实现接口IDBManager,代码定义如下:publicclassDBManager:IDBManager{publicvoidInitialize(){//Writesomeinitializationcodehere}publicboolSave(Tobj){//Writeyourcodeherereturntrue;}}ConfigurationLamarLamar.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类中。完整代码如下:voidConfigureContainer(服务注册表服务s){services.Scan(s=>{s.TheCallingAssembly();s.WithDefaultConventions();});}}将DBManager实例注入到Controller中,然后就可以通过依赖注入获取到Controller中的DBManager实例。实现代码如下:ASP。内置依赖注入容器在IOC圈太弱了,需要第三方来扩展。Lamar就是这样一个非常好的IOC容器,也是StructureMap非常好的替代品。翻译链接:https://www.infoworld.com/article/3339698/how-to-use-lamar-in-aspnet-core.html