天天看点

ASP.NET Core 配置系列二

作者:opendotnet

5 什么是ASP.NET Core 服务

ASP.NET Core 服务是指在应用程序中可以执行特定任务的,例如:

1.给用户邮箱发送验证码服务

2.通过一次性密码来验证用户手机号服务3.恢复用户账号密码的服务4.Entity Framework Core 服务5.Identity 服务

我们将创建一个ASP.NET Core 服务来统计应用程序注册用户的总数,在应用程序根目录下创建一个Services文件夹,在这个文件中创建一个TotalUsers.cs类,在类中添加如下代码:

namespace AspNetCore.Configuration.Services              {              public class TotalUsers              {              public long TUsers()              {              Random rnd = new Random();              return rnd.Next(100, int.MaxValue);              }              }              }           

TUsers()方法返回应用程序注册用户的总人数,我们用随机数来生成最小值为100,最大值为int类型的最大值

接下来我们在应用程序中注册这个类以至于ASP.NET Core能在应用程序中使用这个类

进入Program.cs类并且在调用builder.Build()之前添加代码builder.Services.AddSingleton<TotalUsers>()Program类中的代码如下:

using AspNetCore.Configuration.Services;              var builder = WebApplication.CreateBuilder(args);              builder.Services.AddControllersWithViews();              builder.Services.AddRazorPages();              builder.Services.AddSingleton<TotalUsers>();              var app = builder.Build();              // Configure the HTTP request pipeline.              if (!app.Environment.IsDevelopment())              {              app.UseExceptionHandler("/Home/Error");              // The default HSTS value is 30 days.              app.UseHsts();              }              app.UseHttpsRedirection();              app.UseStaticFiles();              app.UseRouting();              app.UseAuthorization();              app.MapControllerRoute(              name: "default",              pattern: "{controller=Home}/{action=Index}/{id?}");              app.Run();           

builder.Services.AddSingleton<TotalUsers>()代码添加服务,在整个应用程序中共享该服务,接下来我们将这个服务注入到控制器并且在浏览器中显示用户总数

5.1 在控制器中注入ASP.NET Core服务

使用依赖注入特性我们可以在控制器中使用服务,我们可以通过控制器的构造函数注入服务的对象,在下面的代码中我创建了一个HomeController的构造函数并且在构造函数中添加了一个TotalUsers的参数

我们刚才已经在Program类中注册了TotalUsers类因此依赖注入特性会自动为构造函数的参数提供TotalUsers实例并且进行赋值

我们在应用程序的根目录下创建Controllers文件夹,接着在文件夹下添加一个空的MVC Controller并且命名为HomeController.cs

ASP.NET Core 配置系列二

在HomeController中添加如下代码

using AspNetCore.Configuration.Services;              using Microsoft.AspNetCore.Mvc;              namespace AspNetCore.Configuration.Controllers              {              public class HomeController : Controller              {              private TotalUsers _totalUsers;              public HomeController(TotalUsers totalUsers)              {              _totalUsers = totalUsers;              }              public string Index()              {              return "总用户人数是" + _totalUsers.TUsers();              }              }              }           

控制器有一个构造函数,构造函数的参数是我们的服务类TotalUsers,当ASP.NET调用此控制器时,它会看到构造函数要求一个名为TotalUsers服务的依赖对象,接着MVC进入Program类并且查找TotalUsers类,接着会创建一个TotalUsers类的实例并且将该对象传递到HomeController的构造函数Index 方法调用TUsers()方法获取注册用户的总数,最后将数据返回到View

接下来在应用程序的根目录下创建一个Views文件夹,在Views文件夹内创建一个Home文件夹

现在在Views->Home文件夹下创建一个Index.cshtml的空Razor视图,添加下面代码

@model string              @Model           

我们运行应用程序来测试一下这个服务,如下图所示

ASP.NET Core 配置系列二

现在我们看到应用程序可以工作,我们最开始的空模板,创建Service->Controller->View,这对于我们来说是个很好的学习经验,下一节我们将讨论中间件

总结

这节我们主要介绍了ASP.NET Core服务

源代码地址

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/Fundamentals/AspNetCore.Configuration/AspNetCore.Configuration

参考文献

[1]https://www.yogihosting.com/aspnet-core-configurations/#content-generating-middleware