做药品的电商网站,网站搭建设计,券商 做网站,2024年5月新冠高峰ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器#xff0c;实际上#xff0c;你还可以使用第三方的 依赖注入容器 来替代它#xff0c;依赖注入是一种设计模式#xff0c;它能够有效的实现对象之间的解耦并有利于提高单元测试和维护性#xff0c;你可以使用 依赖… ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器实际上你还可以使用第三方的 依赖注入容器 来替代它依赖注入是一种设计模式它能够有效的实现对象之间的解耦并有利于提高单元测试和维护性你可以使用 依赖注入 来改进你的代码设计而不像原来那样到处都是 new 对象。Lamar 是一个流行的高效的模块化的 IOC 容器这篇文章我们将会讨论如何在 ASP.Net Core 中使用 Lamar。为什么要用 Lamar 实现依赖注入 要说 .NET 世界最早的依赖注入容器当属 StructureMap但 StructureMap 最大的缺点就是性能问题而本篇的 Lamar 则非常轻量级并提供了丰富的可供调用APILamar 和 StructureMap 非常类似如果你以前 StructureMap 玩的溜的话切到 Lamar 上是非常容易的。安装 Lamar 要想在 ASP.Net Core 中使用 Lamar需要通过 nuget 安装如下两个包。LamarLamar.Microsoft.DependencyInjection你可以通过可视化界面 Manage NuGet Packages。或者如下命令进行安装。
Install-Package Lamar
Install-Package Lamar.Microsoft.DependencyInjection创建 IDBManager 和 DBManager 首先创建一个 IDBManager 接口类用于后续做依赖注入用代码定义如下public interface IDBManager{void Initialize();bool SaveT(T obj);}接下来定义 DBManager 类并实现接口 IDBManager 代码定义如下public class DBManager: IDBManager{public void Initialize(){//Write some initialization code here}public bool SaveT(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.UseStartupStartup();});}配置 Lamar 容器 接下来可以在 ConfigureServices() 方法中配置 Container 容器代码如下public void ConfigureServices(IServiceCollection services){var container new Container(x {x.AddTransientIDBManager, 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.AddTransientIDBManager, 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 ILoggerHomeController _logger;private IDBManager _dbManager;public HomeController(ILoggerHomeController 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