.Net利用Microsoft.Extensions.DependencyInjection配置依赖注入

一、概述

为了让接口程序更加模块化和可测试,采用依赖注入的方式调用接口方法。

二、安装Microsoft.Extensions.DependencyInjection

在NuGet里面搜索Microsoft.Extensions.DependencyInjection,并进行安装。

三、代码编写

3.1 创建Service 实现类
csharp 复制代码
/*************************************
*  功    能:测试Service实现类
*  创 建 人:********
*  创建时间:2024-02-19
* ***********************************/
namespace Application
{
    /// <summary>
    /// 测试Service.
    /// </summary>
    public class TestService : ITestService
    {
        /// <summary>
        /// 测试查询.
        /// </summary>
        public List<AgentGroup> TestSelect()
        {
             var list =   SqlSugarORM.SqlSugarHelper.Db.Queryable<AgentGroup>().ToList();
             return list;
        }

    
    }
}
3.2 创建Service 声明类
csharp 复制代码
/*************************************
*  功    能:测试Service 接口类声明类
*  创 建 人:********
*  创建时间:2024-02-19
* ***********************************/

namespace CadApplication.Service
{

    public interface ITestService
    {
        /// <summary>
        /// 测试查询.
        /// </summary>
        List<AgentGroup> TestSelect();

    }
}
3.3 控制器里面通过构造函数注入
csharp 复制代码
/*************************************
 *  功    能:测试控制器
 *  创 建 人:********
 *  创建时间:2024-02-19
 * ***********************************/
namespace WebApi.Controllers
{

    /// <summary>
    /// 测试Controller.
    /// </summary>
    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {
        private readonly ITestService _testService;
        /// <summary>
        /// 构造函数.
        /// </summary>
        /// <param name="testService"></param>
        public TestController(ITestService testService) 
        {
            _testService=testService;

        }

        /// <summary>
        /// 测试查询.
        /// </summary>
        [Route("TestSelect")]
        [HttpPost]
        public List<AgentGroup> TestSelect() 
        {
            return _testService.TestSelect();
        }
    }
}
3.4 在启动类里面配置注入的Service
csharp 复制代码
builder.Services.AddSingleton<ITestService, TestService>();

整体的Program.cs代码如下:

csharp 复制代码
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<ITestService, TestService>().AddSingleton<DrawLineService>();



var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();


app.Run();
3.5 如果需要在某一个类里面单独调用也可以这样写
csharp 复制代码
 static void Main(string[] args)  
    {  
        // 配置依赖注入容器  
        var serviceCollection = new ServiceCollection();  
        serviceCollection.AddTransient<IGreetingService, GreetingService>(); // 注册服务及其实现  
  
        var serviceProvider = serviceCollection.BuildServiceProvider(); // 构建服务提供者  
  
        // 解析依赖项并使用  
        var greetingService = serviceProvider.GetService<IGreetingService>();  
        Console.WriteLine(greetingService.GetGreeting());  
    }  

四、结束

至此.net配置依赖注入结束。

相关推荐
郑寿昌15 小时前
2026 全球 AI 工厂市场格局与发展趋势
大数据·人工智能·microsoft
qq_2837200516 小时前
RAG 重排序(Rerank)优化:BGE-Reranker、Cross-Encoder 实战详解
microsoft
步步为营DotNet19 小时前
深挖.NET 11:.NET Aspire 在云原生应用韧性架构构建的探索与实践
云原生·架构·.net
rick97719 小时前
C# ModuleInitializer:程序集级别的初始化黑科技
.net
Lucky_Turtle20 小时前
【Azure】微软云文件存储
microsoft·flask·azure
松果财经21 小时前
从“单点收付”到“跨国司库”,金融为何是出海深水区的关键变量?
人工智能·microsoft·金融
公子小六2 天前
基于.NET的Windows窗体编程之WinForms打印
windows·microsoft·c#·.net·winforms
light blue bird2 天前
可更新组装工序资源图表功能组件
开发语言·前端·jvm·.net·状态模式
步步为营DotNet2 天前
深入.NET 11:ASP.NET Core 10 在构建高可用分布式系统的关键技术与实践
asp.net·.net·wpf
m0_634666732 天前
微软的 AI 重组和成本焦虑,正在把 Copilot 推到一场更硬的经营考试里
人工智能·microsoft·copilot