zoukankan      html  css  js  c++  java
  • 在 ASP.NET Core 中将依赖项注入到控制器

    前言

    ASP.NET Core MVC 控制器通过构造函数显式请求依赖关系。ASP.NET Core 内置有对依赖关系注入 (DI) 的支持。DI 使应用更易于测试和维护。

    构造函数注入

    服务作为构造函数参数添加,并且运行时从服务容器中解析服务。 通常使用接口来定义服务。 例如,考虑需要当前时间的应用。 以下接口公开 IDateTime 服务:

    public interface IDateTime{    DateTime Now { get; }}

    以下代码实现 IDateTime 接口:

    public class SystemDateTime : IDateTime{    public DateTime Now    {        get { return DateTime.Now; }    }}

    将服务添加到服务容器中:

    public void ConfigureServices(IServiceCollection services){    services.AddSingleton<IDateTime, SystemDateTime>();
        services.AddControllersWithViews();}

    以下代码根据一天中的时间向用户显示问候语:

    public class HomeController : Controller{    private readonly IDateTime _dateTime;
        public HomeController(IDateTime dateTime)    {        _dateTime = dateTime;    }
        public IActionResult Index()    {        var serverTime = _dateTime.Now;        if (serverTime.Hour < 12)        {            ViewData["Message"] = "It's morning here - Good Morning!";        }        else if (serverTime.Hour < 17)        {            ViewData["Message"] = "It's afternoon here - Good Afternoon!";        }        else        {            ViewData["Message"] = "It's evening here - Good Evening!";        }        return View();    }

    运行应用并且系统将根据时间显示一条消息。

    FromServices的操作注入

    FromServicesAttribute 允许将服务直接注入到操作方法,而无需使用构造函数注入:

    public IActionResult About([FromServices] IDateTime dateTime){    return Content( $"Current server time: {dateTime.Now}");}

    从控制器访问设置

    从控制器中访问应用或配置设置是一种常见模式。ASP.NET Core 中的选项模式 中所述的选项模式是管理设置的首选方法 。 通常情况下,不直接将 IConfiguration 注入到控制器。

    创建表示选项的类。 例如:

    public class SampleWebSettings{    public string Title { get; set; }    public int Updates { get; set; }}

    将配置类添加到服务集合中:

    public void ConfigureServices(IServiceCollection services){    services.AddSingleton<IDateTime, SystemDateTime>();    services.Configure<SampleWebSettings>(Configuration);
        services.AddControllersWithViews();}

    将应用配置为从 JSON 格式文件中读取设置:

    public class Program{    public static void Main(string[] args)    {        CreateHostBuilder(args).Build().Run();    }
        public static IHostBuilder CreateHostBuilder(string[] args) =>        Host.CreateDefaultBuilder(args)            .ConfigureAppConfiguration((hostingContext, config) =>            {                config.AddJsonFile("samplewebsettings.json",                    optional: false,                    reloadOnChange: true);            })            .ConfigureWebHostDefaults(webBuilder =>            {                webBuilder.UseStartup<Startup>();            });}

    以下代码从服务容器请求 IOptions<SampleWebSettings> 设置,并通过 Index 方法使用它们:

    public class SettingsController : Controller{    private readonly SampleWebSettings _settings;
        public SettingsController(IOptions<SampleWebSettings> settingsOptions)    {        _settings = settingsOptions.Value;    }
        public IActionResult Index()    {        ViewData["Title"] = _settings.Title;        ViewData["Updates"] = _settings.Updates;        return View();    }}
  • 相关阅读:
    字符的编码
    数据的基本类型和内置方法(二)
    基本的数据类型和内置方法介绍 (一)
    流程运算 if while for
    用户交换 基本数据类型 基本运算符 格式化输出
    机器语言发展简介和变量的介绍
    计算机基础
    Python学习建议和要求总结
    CH135 最大子序和 题解报告
    HRBUST1356 Leyni,罗莉和队列 题解报告
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14030603.html
Copyright © 2011-2022 走看看