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