.net 6.0 的 依赖注入 + 在控制器中获取配置文件信息

发布时间 2023-06-26 17:12:56作者: luytest

.net 6.0 的 依赖注入 相比 .net core,主要是默认删除了startup.cs后,注册需要在program.cs文件中进行,别的都差不多。

 

想在页面输出当前时间,用依赖注入的方式

1.定义接口

待实现的GetNow方法,其实属性也可以,无所谓。

    public interface IDateTime
    {
        DateTime GetNow();
    }

2.实现接口的类

    public class SystemDateTime : IDateTime
    {
        public DateTime GetNow()
        {
            return DateTime.Now;
        }
    }

3.在启动文件program.cs中注册

一般是用单例模式

builder.Services.AddSingleton<IDateTime, SystemDateTime>();

4.在控制器中通过构造函数调用

经典的依赖注入方式,跟framework没啥不同,这样在index视图中调用 ViewData["DateTime"] 就能获取到时间了。

    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        private readonly IDateTime _dateTime;

        public HomeController(ILogger<HomeController> logger,IDateTime dateTime)
        {
            _logger = logger;
            _dateTime = dateTime;
        }
        public IActionResult Index()
        {
            ViewData["DateTime"] = _dateTime.GetNow();
            return View();
        }
    }

 

在控制器中获取配置文件信息

我们有时候需要在控制器中读取配置文件的信息,这个好办

首先在配置文件里自定义一个节点 LuySetting

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "CoreMvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "LuySetting": {
    "Name": "jack",
    "Type": "Admin"
  }
}

在控制器声明IConfiguration接口对象,并注入到构造函数

就是拿上面的例子改的

        private readonly ILogger<HomeController> _logger;

        private IConfiguration _configuration { get; set; }

        private readonly IDateTime _dateTime;

        public HomeController(ILogger<HomeController> logger,IDateTime dateTime,IConfiguration configuration)
        {
            _logger = logger;
            _dateTime = dateTime;
            _configuration = configuration;
        }

使用

        public IActionResult Index()
        {
            ViewData["DateTime"] = _dateTime.GetNow();
            ViewData["LuySettingName"] = _configuration.GetSection("LuySetting")["Name"];
            return View();
        }

多级配置

比如在 LuySetting 节点下添加一个两级的节点

 "Group": {
      "Name": "English"
    }

获取

_configuration.GetSection("LuySetting")["Group:Name"];