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

.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"];

 

posted @   luytest  阅读(354)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示