.Net core服务注入


前言

面向对象设计(OOD)里有一个重要的思想就是依赖倒置原则(DIP),并由该原则牵引出依赖注入(DI)、控制反转(IOC)及其容器等概念,增强了代码的高内聚,低耦合。本文简单的简绍Core依赖注入、服务生命周期。


提示:以下是本篇文章正文内容,下面案例可供参考

一、依赖注入?

(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个.net实例,调用者)需要另一个角色(另一个.net实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在容器里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由容器来完成,然后注入调用者,因此也称为依赖注入。

二、编码

1. 生命周期介绍

在这里插入图片描述

2.定义一个接口和实现

在这里插入图片描述

接口InterfaceTest代码如下(示例):

 public interface InterfaceTest
    {
        public Task<string> HelloWord();
    }

实现InterfaceTest代码如下(示例):

  public class InterfaceTestImpl : InterfaceTest
    {
        public  Task<string> HelloWord()
        {
            return Task.FromResult("Hello Word");
        }
    }

3.Startup类代码编写

代码如下(示例):

   // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            //每次请求,都获取一个新的实例,同一个请求获取多次会得到相同的实例
            services.AddSingleton(typeof(InterfaceTest),typeof(InterfaceTestImpl));
            //每次请求,都获取一个新的实例,即使同一个请求获取多次也会是不同的实例
            services.AddTransient(typeof(InterfaceTest), typeof(InterfaceTestImpl));
            //单例模式,每次都获取同一个实例(和静态类几乎一样)
            services.AddScoped(typeof(InterfaceTest), typeof(InterfaceTestImpl));
        }

4.控制器代码编写

代码如下(示例):

namespace StudyCore.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;
     
        //构造函数注入
        private readonly InterfaceTest _efserver;
        public WeatherForecastController(InterfaceTest efserver,ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
            _efserver = efserver;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            var rng = new Random();
            _logger.LogInformation("asdadsadsa");
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
        [HttpGet]
        [Route("Gets")]
        public async Task<string> Gets(int id)
        {
            
            _logger.LogInformation(string.Format("Gets方法调用了"));
            return await _efserver.HelloWord();
        }
    }
}


5.运行测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值