asp.net core 依赖注入,同时也支持MVC

依赖注入是 实现代码之间的解耦

首先 创建需要 注入的类 演示代码写的比较简单 这篇文章 主要 是 说明 asp.net core的注入方式

创建 Test.cs 以这个简单 代码 举例 注入这个类

namespace aspnetcore007
{
    public class Test
    {
        public int Add(int i ,int j)
        {
            return i + j;
        }
    }
}

1. 在.net6 中的 Program.cs 添加 依赖注入,asp.net core 中不需要引用依赖注入包,也不需要 创建 依赖注入,asp.net core 默认创建好了。我们可以直接 调用。 在 Program.cs 中添加 依赖注入代码 如下

builder.Services.AddScoped();

这一句 代码 就 配置好 Test 的依赖注入

下面是 调用 依赖注入 在此 说明下, .net6的依赖注入是 以 构造函数方式 注入的

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace aspnetcore007.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class Test1Controller : ControllerBase
    {
        private readonly Test test;
        //构造函数注入
        public Test1Controller(Test test)
        {
            this.test = test;
        }
        [HttpGet]
        public int Add2()
        {
           return this.test.Add(10, 20);
        }
    }
}

asp.net core 还有一种 依赖注入方式  这种方式 是 操作 比较耗时的场景  如果还是选择 构造函数 注入,那么 本来 不耗时的接口 运行 就会 非常的 慢,所以采用 谁调费时操作,谁自己注入

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace aspnetcore007.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class Test1Controller : ControllerBase
    {
        private readonly Test test;
        private readonly Test2 test2;
        //构造函数注入
        public Test1Controller(Test test,Test2 test2)
        {
            this.test = test;
            this.test2 = test2;
           
        }
        [HttpGet]
        public int Add2()
        {
           return this.test.Add(10, 20);
           // 因为 下面 Test()接口 会非常耗时
           // 所以调用 本方法Add2() 就会和它一样的耗时 这就是 构造函数注入的 弊端
        }

        [HttpGet]
        public void Test()
        {
           this.test2.Test66();//比如 这个方法操作后 非常耗时,需要很久
           
        }
    }
}

解决问题版 如下

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace aspnetcore007.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class Test1Controller : ControllerBase
    {
        private readonly Test test;
        //构造函数注入
        public Test1Controller(Test test)
        {
            this.test = test;
           
        }
        [HttpGet]
        public int Add2()
        {
           return this.test.Add(10, 20);
           // 这次调用 就会很快,因为 耗时的 注入 已经不在 构造函数中注入了。
           // 只有它自己Test() 调用才 耗时
        }

        [HttpGet]
        public void Test([FromServices]Test2 test2)//在参数中注入 达到注入分离 谁掉在注 
        {
           test2.Test66();//比如 这个方法操作后 非常耗时,需要很久
           
        }
    }
}

最后 推荐 转载参考文章 C# 依赖注入:AddTransient、AddScoped、AddSingleton的理解_小夜 的博客-CSDN博客_addtransient

你可能感兴趣的:(.NET,c#,.net)