介绍为什么要用拉马尔实现依赖注入
安装拉马尔
创建IDBManager和DBManager
这篇文章将为大家详细讲解有关拉马尔怎么在ASP。网络核心项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
为什么要用拉马尔实现依赖注入
要说。Net世界最早的依赖注入容器,当属StructureMap,但StructureMap最大的缺点就是性能问题,而本篇的拉马尔则非常轻量级,并提供了丰富的可供调用API,拉马尔和StructureMap非常类似,如果你以前StructureMap玩的溜的话,切到拉马尔上是非常容易的。
安装拉马尔
要想在ASP。网络核心中使用拉马尔,需要通过nuget安装如下两个包。
- <李>
拉马尔
李> <李>Lamar.Microsoft。李DependencyInjection
>你可以通过可视化界面管理NuGet包。
或者如下命令进行安装。
Install-Package Lamar Install-Package Lamar.Microsoft。DependencyInjection
创建IDBManager和DBManager
首先创建一个IDBManager接口类,用于后续做依赖注入用,代码定义如下:
, public interface IDBManager ,{ void 才能初始化(); bool 才能;Save< T> (T obj); 以前,}>接下来定义DBManager类并实现接口IDBManager,代码定义如下:
, public class DBManager: IDBManager ,{ public 才能;void 初始化() {才能 ,,//Write some initialization code 这里 ,,} public 才能bool Save< T> (T obj) {才能 ,,//Write your code 这里 ,,return 真实; ,,} 以前,}>配置拉马尔
Lamar.Microsoft。DependencyInjection包提供了一个UseLamar()方法能够将拉马尔引入到ASP。网络核心基础架构中、下面的代码展示了如何去实现。
, public class 程序 ,{ public 才能;static  void Main (string [], args) {才能 ,,CreateHostBuilder (args) .UseLamar () .Build () .Run (); ,,} public 才能static IHostBuilder  CreateHostBuilder (string [], args),=比; ,,Host.CreateDefaultBuilder (args) ,,,.ConfigureWebHostDefaults (webBuilder =比; ,,,{ ,,,,webBuilder.UseStartup(); ,,,}); 以前,}> 配置拉马尔容器
接下来可以在ConfigureServices()方法中配置容器容器,代码如下:
,, public void ConfigureServices (IServiceCollection 服务) {才能 ,,var container =, new 容器(x =比; ,,{ ,,,x.AddTransient(); ,,}); ,,services.AddControllersWithViews (); 以前,,}> 值得注意的是拉马尔拥有强大的自动装配能力,它可以搜索请求类型和所需类型的构造函数,并构建其需要的实例,下面的代码展示了如何通过ConfigureContainer()方法去实现,这里我将该方法放在启动类中,完整代码如下:
, public class 启动 ,{//才能,却;能够method gets nbsp; by 从而运行时只Use 却;能够method 用add services 用,容器。 public 才能;void  ConfigureServices (IServiceCollection 服务) {才能 ,,var container =, new 容器(x =比; ,,{ ,,,x.AddTransient(); ,,}); ,,services.AddControllersWithViews (); ,,} public 才能;void  ConfigureContainer (ServiceRegistry 服务) {才能 ,,services.Scan (s =比; ,,{ ,,,s.TheCallingAssembly (); ,,,s.WithDefaultConventions (); ,,}); ,,} 以前,}> 控制器中注入DBManager实例
接下来就可以在控制器中通过依赖注入的方式获取DBManager实例啦,实现代码如下:
, public class HomeController :控制器 ,{ private 才能readonly ILogger< HomeController>, _logger; private 才能;IDBManager  _dbManager; public 才能;HomeController (ILogger拉马尔怎么在ASP。网络核心项目中使用