C# Webapi 简单的依赖注入-构造函数
控制器部分:
using Microsoft.AspNetCore.Mvc;
using WebApplication1.IServices;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1.Controllers
{
[ApiController]
[Route("[controller]")]
// 指定当前的控制器是哪个Swagger版本的 指定给 后台_version02
[ApiExplorerSettings(IgnoreApi = false, GroupName = nameof(ApiVersions.endApi))]
public class LoginController : ControllerBase
{
private readonly Calc calc;
public LoginController(Calc calc)
{
this.calc = calc;
}
[HttpGet]
public int TestAdd(int i , int j)
{
return calc.Add(i, j);
}
}
}
服务部分:通过构造函数注入服务
namespace WebApplication1
{
public class Calc
{
public int Add(int i,int j)
{
return i + j;
}
}
}
当有两个服务的时候,其中一个服务消耗较长的时间,那么另外一个服务即使没有使用到时间长的服务,但是速度依旧很慢 ;
eg:
控制器:
using Microsoft.AspNetCore.Mvc;
using WebApplication1.IServices;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1.Controllers
{
[ApiController]
[Route("[controller]")]
// 指定当前的控制器是哪个Swagger版本的 指定给 后台_version02
[ApiExplorerSettings(IgnoreApi = false, GroupName = nameof(ApiVersions.endApi))]
public class LoginController : ControllerBase
{
private readonly Calc calc;
private readonly TestService testService;
public LoginController(Calc calc, TestService testService)
{
this.calc = calc;
this.testService = testService;
}
/// <summary>
/// 求和服务
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
[HttpGet]
public int TestAdd(int i , int j)
{
return calc.Add(i, j);
}
/// <summary>
/// 读取文件的服务 消耗时间长
/// </summary>
/// <returns></returns>
[HttpGet]
public int Test1()
{
return testService.Count;
}
}
}
求和服务:
namespace WebApplication1
{
public class Calc
{
public int Add(int i,int j)
{
return i + j;
}
}
}
计算文件中 exe 个数的服务:
namespace WebApplication1
{
public class TestService
{
private string[] files;
public TestService()
{
this.files = Directory.GetFiles("C:/Users/朱龙旭/Downloads", "*.exe",
SearchOption.AllDirectories);
}
// 计算exe文件的个数
public int Count
{
get
{
return this.files.Length;
}
}
}
}
解决办法:通过 action 参数注入 ;
[FromServices]
using Microsoft.AspNetCore.Mvc;
using WebApplication1.IServices;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1.Controllers
{
[ApiController]
[Route("[controller]")]
// 指定当前的控制器是哪个Swagger版本的 指定给 后台_version02
[ApiExplorerSettings(IgnoreApi = false, GroupName = nameof(ApiVersions.endApi))]
public class LoginController : ControllerBase
{
private readonly Calc calc;
public LoginController(Calc calc)
{
this.calc = calc;
}
/// <summary>
/// 求和服务
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
[HttpGet]
public int TestAdd(int i , int j)
{
return calc.Add(i, j);
}
/// <summary>
/// 读取文件的服务 消耗时间长
/// </summary>
/// <returns></returns>
[HttpGet]
public string Test1([FromServices] TestService testService,string kk)
{
return testService.Count.ToString() + "***" + kk;
}
}
}
public string Test1([FromServices] TestService testService,string kk)
{
return testService.Count.ToString() + "***" + kk;
}
C# Webapi 简单的依赖注入-构造函数的更多相关文章
- Ninject依赖注入——构造函数、属性、方法和字段的注入
Ninject依赖注入——构造函数.属性.方法和字段的注入(三) 1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-c ...
- ASP.NET Core 依赖注入(构造函数注入,属性注入等)
原文:ASP.NET Core 依赖注入(构造函数注入,属性注入等) 如果你不熟悉ASP.NET Core依赖注入,先阅读文章: 在ASP.NET Core中使用依赖注入 构造函数注入 构造函数注 ...
- webapi框架搭建-依赖注入之autofac
前言 c#的依赖注入框架有unity.autofac,两个博主都用过,感觉unity比较简单而autofac的功能相对更丰富(自然也更复杂一点),本篇将基于前几篇已经创建好的webapi项目,引入au ...
- 简单解析依赖注入(控制反转)在Spring中的应用
IoC——Inversion of Control 控制反转DI——Dependency Injection 依赖注入 大家都知道,依赖注入是Spring中非常重要的一种设计模式.可能很多初学者 ...
- ASP.NET Core中的依赖注入: 构造函数的选择与服务生命周期管理
ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...
- TypeC一个微软开发的超简单.NET依赖注入/IoC容器
控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...
- Ninject依赖注入——构造函数的注入
1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-coupled, highly-cohesive)的模块,然后以一种 ...
- C++ 简单实现 依赖注入(IOC)
由于C++ 不支持“反射机制”, 在C++中需要实现依赖注入或控制反转需要增加辅助程序.例如在Windows 开发程序中根据类名动态创建对象,需要在类定义中增加宏.本文主要介绍C++ Ioc的一种实现 ...
- 使用Java注解实现简单的依赖注入
代码如下: /** * 注入的注解,为空,仅起标志作用 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @int ...
- Android 使用dagger2进行依赖注入(基础篇)
0. 前言 Dagger2是首个使用生成代码实现完整依赖注入的框架,极大减少了使用者的编码负担,本文主要介绍如何使用dagger2进行依赖注入.如果你不还不了解依赖注入,请看这一篇. 1. 简单的依赖 ...
随机推荐
- 【Java】ElasticSearch 在项目里的应用
一.前言: 好久没写笔记了,最近忙一个项目,用到ES查询,以往的笔记写ES都是搭建环境,用Kibana玩一玩 这次是直接调用API操作了,话不多说,进入主题 二.环境前提: 公司用的还是纯Elasti ...
- docker容器下安装nccl失败,报错:Failed to init nccl communicator for group,init nccl communicator for group nccl_world_group
相关内容参考: https://www.cnblogs.com/devilmaycry812839668/p/15022320.html =============================== ...
- Ubuntu22.04系统安装DeepMind Lab
相关资料: DeepMind Lab的一些python例子-----(Ubuntu22.04系统安装DeepMind Lab)后续 ================================== ...
- 一文讲透CRC校验码-附赠C语言实例
一口君最近工作用到CRC校验,顺便整理本篇文章和大家一起研究. 一.CRC概念 1. 什么是CRC? CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和. ...
- homeassistant_Midea AC LAN使用问题记录
1. hass life设备在通知中提示连接成功就不需要修改hass life 中的配置内容 2. 如果空调显示不可用, 只需要在 配置 - 集成 删除Midea AC LAN后重新自动添加即可
- 使用 Portainer CE 管理 Docker
此文档参考官方文档 Install Portainer CE with Docker on Linux 编写. 创建容器 docker volume create portainer_data 启动 ...
- 使用 Microsoft Remote Desktop 远程连接 Windows
Windows 使用 Microsoft 帐户登录 远程连接时使用的用户名和密码是你的 Microsoft 帐户的用户名和密码 Windows 使用本地帐户登录 远程连接时使用的用户名和密码是你本地登 ...
- 3d格式介绍之OBJ格式
OBJ格式是一种用于3D模型的文件格式,全称为Wavefront OBJ.它由Wavefront Technologies公司开发,最初用于其高级视觉动画软件,但后来广泛应用于各种3D图形软件中. 本 ...
- c++学习笔记(三):函数++
函数PLUS 函数默认参数 在c++中,函数的形参列表中的形参是可以有默认值的.调用函数时,如果未传递参数的值(传入参数为空),则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值. 语法:返回 ...
- git重命名文件夹
在源代码文件夹中打开git bash, 不同名称的文件夹命令: 1. git mv A An 3. git add -u An 4. git commit -m "重命名A为An&quo ...