.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"];
标签:
依赖注入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现