• 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,所有需要通道控制器和视图要进行注册一下mvc(通过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>();
  • 相关阅读:
    Makefile中的ifeq 多条件使用
    Android引入动态库so的方法
    在Win10上使用Visual Studio2015的Android模拟器
    linux下insmod模块出现“Invalid parameters"
    在干净的ubuntu 14.10上编译Qemu2.2.0的过程
    Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)
    C++类中一个构造函数调用另一个构造函数
    用汇编语言角度来理解C语言的一些问题
    TCP协议的安全性分析
    MySQL入门,第四部分,学会创建、删除表
  • 原文地址:https://www.cnblogs.com/hcyesdo/p/12834426.html
Copyright © 2020-2023  润新知