ASP.NET Core3.x 基础—注册服务(2)
这篇文章介绍在ASP.NET Core中注册一下自己的服务。
首先创建一个Services文件夹。在文件夹里面创建一个接口 IClock,以及两个类ChinaClock、UtcClock。这两个类分别实现 IClock这个接口。

IClock:
namespace WebApplication1.Services
{
public interface IClock
{
}
}
ChinaClock:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace WebApplication1.Services
{
public class ChinaClock:IClock
{
}
}
UtcClock:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace WebApplication1.Services
{
public class UtcClock:IClock
{
}
}
先不管上面的接口和类,不写任何代码。。。
现在去Startup类去注册一下我们写的服务:先写接口,再写实现这个接口的具体的类
(详细见注释)
public void ConfigureServices(IServiceCollection services)
{
//负责配置依赖注入
//DI 依赖注入机制依赖于IOC容器(控制反转)
//使用Asp.NET Core MVC,所有需要通道控制器和视图要进行注册一下m\v\c(通过services服务注册)
services.AddControllersWithViews();
//注册一个自己写的服务
/*
* AddSingleton 表示我们注册这个服务的生命周期 泛型中写了一个接口和实现接口的类,作用就是每当有其他类型请求IClock时,那IoC容器就返回一个ChinaClock
*/
services.AddSingleton<IClock, ChinaClock>();
}
注册服务完事了,我们就要用它
建一个Controllers文件夹,然后建立一个HomeController这样一个类

具体为什么要这样做见注释。补充一点方便理解:在Stratup中我们注入了服务,并且
我们注册的是 ChinaClock这个具体的类。这就表示通过构造函数我们就可以在此返回ChinaClock中的实例。
using Microsoft.AspNetCore.Mvc;
using WebApplication1.Services; namespace WebApplication1.Controllers
{
public class HomeController:Controller
{
/*
* 构造函数快捷键:ctor
* 构造函数注入参数IClocks实例,如果IClock注册在我们的IoC容器中(也就是Startup类中),它所对应的具体类它的实例就会返回回来(实际上就解耦了)
* DI 依赖注入优点:
* -解耦,没有强依赖
* -利于单元测试
* -不需要了解具体的服务类
* -也不需要管理服务类的生命周期
*
*/
public HomeController(IClock clock)
{ }
}
}
如果我不想注入ChinaClock而是注入UtcClock,我们也可以这样写:这样写作用实际上有一个解耦的发生,我们注入两个不同的服务,但是接口里面的内容并没有发生变化。
DI优点上面代码块也注释了,可以看看。
//services.AddSingleton<IClock, ChinaClock>();
services.AddSingleton<IClock, UtcClock>();
ASP.NET Core3.x 基础—注册服务(2)的更多相关文章
- (8)ASP.NET Core3.1 Ocelot Consul服务注册与发现
1.服务注册与发现(Service Discovery) ●服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul.ZooKeeper.etcd.Eureka) ...
- Asp.net core 向Consul 注册服务
Consul服务发现的使用方法:1. 在每台电脑上都以Client Mode的方式运行一个Consul代理, 这个代理只负责与Consul Cluster高效地交换最新注册信息(不参与Leader的选 ...
- ASP.NET Core3.x 基础(1)
ASP.NET Core与2.x相比发生的一些变化: 项目结构 Blazor SignalR gRPC 关于Program类:Main方法,在系统执行时就会找到这个Main方法,实际上是配置了ASP. ...
- ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity ...
- ASP.NET Core gRPC 使用 Consul 服务注册发现
一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...
- Asp.Net Core入门之自定义服务注册
谈到服务注册,首先我们先了解一下服务注册时使用的三种方式,也代表了不同的服务生命周期: AddTransient AddScoped AddSingleton AddSingleton生命周期最长,其 ...
- 微服务(入门二):netcore通过consul注册服务
基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...
- 探索Asp net core3中的 项目文件、Program.cs和通用host(译)
引言 原文地址 在这篇博客中我将探索一些关于Asp.net core 3.0应用的基础功能--.csproj 项目文件和Program源文件.我将会描述他们从asp.net core 2.X在默认模版 ...
随机推荐
- 如何使用Swagger-UI在线生成漂亮的接口文档
一.简单介绍 Swagger是一个实现了OpenAPI(OpenAPI Specification)规范的工具集.OpenAPI是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API ...
- 使用 Chrome 插件 Vimium 打造黑客浏览器
之前一直用 cVim,与 Vimium 功能类似,但是之后不在更新了,故转战到 Vimium. 简介 官网:http://vimium.github.io/ Vimium 是 Google Chrom ...
- BeanShell计算支付价格
问题:需要获取支付价格,而支付价格是商品价格*折扣 解决:先将商品价格和折扣获取出来,然后使用BeanShell将两个值相乘,获得最后的支付价格 1.使用json提取器提取商品的价格 2.使用正则表达 ...
- 1324E - Sleeping Schedule
题目大意:一天有h个小时,一个人喜欢睡觉,一共睡n次,每次都睡h个小时,开始时间为0,间隔a[i]或a[i]-1个小时开始睡第i次觉,每天都有一个最好时间区间,问这n次觉,最多有多少次是在最好时间内睡 ...
- vue2.x学习笔记(十九)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12631022.html. 程序化的事件侦听器 在前面的学习中,我们已经知道了[$emit]全局属性的用法,它可以被 ...
- SpringBoot集成MyBatis底层原理及简易实现
MyBatis是可以说是目前最主流的Spring持久层框架了,本文主要探讨SpringBoot集成MyBatis的底层原理.完整代码可移步Github. 如何使用MyBatis 一般情况下,我们在Sp ...
- GIT生成ssh(window7系统)——git工具篇
由于本地git仓库和github仓库直接的传递需要ssh加密的,所以必须要生成ssh,下面是具体的操作步骤: 1.打开GIT命令行,输入命令:ssh-keygen -t rsa -C "yo ...
- 基于nodejs的游戏服务器
开源一个四年前自己写的node服务器,有兴趣的可以继续开发-- 架构为mysql,redis,node. 数据格式为 protocol buff 如果只做简单的演示,这个架构非常适合你.. 还是typ ...
- .NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布
从1月份首次公开介绍这个项目到现在也快4个月了,期间做了一些修修补补整体没什么大的改动.2.0算是发布之后第一个大的版本更新,带来了许多新功能新特性,也修复了一些已知的bug,在此感谢在博客.Issu ...
- 推荐web前端框架bootstrap
bootstrap是基于Jquery而开发的一个前端框架. 全中文的学习网站:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 实际上就是 ...