这篇文章介绍在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)的更多相关文章

  1. (8)ASP.NET Core3.1 Ocelot Consul服务注册与发现

    1.服务注册与发现(Service Discovery) ●服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul.ZooKeeper.etcd.Eureka) ...

  2. Asp.net core 向Consul 注册服务

    Consul服务发现的使用方法:1. 在每台电脑上都以Client Mode的方式运行一个Consul代理, 这个代理只负责与Consul Cluster高效地交换最新注册信息(不参与Leader的选 ...

  3. ASP.NET Core3.x 基础(1)

    ASP.NET Core与2.x相比发生的一些变化: 项目结构 Blazor SignalR gRPC 关于Program类:Main方法,在系统执行时就会找到这个Main方法,实际上是配置了ASP. ...

  4. ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity ...

  5. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  6. Asp.Net Core入门之自定义服务注册

    谈到服务注册,首先我们先了解一下服务注册时使用的三种方式,也代表了不同的服务生命周期: AddTransient AddScoped AddSingleton AddSingleton生命周期最长,其 ...

  7. 微服务(入门二):netcore通过consul注册服务

    基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...

  8. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  9. 探索Asp net core3中的 项目文件、Program.cs和通用host(译)

    引言 原文地址 在这篇博客中我将探索一些关于Asp.net core 3.0应用的基础功能--.csproj 项目文件和Program源文件.我将会描述他们从asp.net core 2.X在默认模版 ...

随机推荐

  1. String 对象-->charCodeAt() 方法

    1.定义和用法 获取指定下标的字符的ASCII码(Unicode) 返回值:0~65535之间的整数 语法: string.charCodeAt(index) 参数: index:指定字符的下标 举例 ...

  2. intellij idea 设置用真机测试android

    android自带的模拟器是不容置疑的慢,genymontion虽然快,但是觉得有点怪的感觉,哈哈,其实这些都不是重点. 之前是用myeclipse开发android的,虽然一直很想用eclipse来 ...

  3. 提升效率必备!8个超好用的Python内置函数

    文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 吃着不想停 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  4. JavaScript数据类型 —— 基础语法(2)

    JavaScript基础语法(2) 数据类型 js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object) ...

  5. web form常用控件

    表单元素一共12个分三大类 文本类<input type="text" />             文本框<input type="password& ...

  6. [linux][nginx] 常用

    原文链接http://www.cnblogs.com/codingcloud/p/5095066.html 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root ...

  7. PHP文件包含漏洞(利用phpinfo)复现

    0x01 简介 PHP文件包含漏洞中,如果找不到可以包含的文件,我们可以通过包含临时文件的方法来getshell.因为临时文件名是随机的,如果目标网站上存在phpinfo,则可以通过phpinfo来获 ...

  8. 最简单的懒人springcloud之Eureka(服务注册与发现)

    本文开发软件是STS,是eclipse为springboot项目而生的一个软件,用这个软件开发spring的项目版本都会自己对应的,话不多说直接上代码 springboot版本2.1.8.RELEAS ...

  9. ASP.Net内置对象之网页之间传参(一)

    Response对象 主要运用于数据从服务器发送到浏览器,可以输出数据.页面跳转.各个网页之间传参数等操作. 以下讲解几个常用例子: 在页面中输出数据 主要通过Write .WriteFile方法输出 ...

  10. TensorFlow命令行参数FLAGS使用

    import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf #tensorboard --logdir=&qu ...