控制器部分:

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 简单的依赖注入-构造函数的更多相关文章

  1. Ninject依赖注入——构造函数、属性、方法和字段的注入

    Ninject依赖注入——构造函数.属性.方法和字段的注入(三) 1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-c ...

  2. ASP.NET Core 依赖注入(构造函数注入,属性注入等)

    原文:ASP.NET Core 依赖注入(构造函数注入,属性注入等) 如果你不熟悉ASP.NET Core依赖注入,先阅读文章: 在ASP.NET Core中使用依赖注入   构造函数注入 构造函数注 ...

  3. webapi框架搭建-依赖注入之autofac

    前言 c#的依赖注入框架有unity.autofac,两个博主都用过,感觉unity比较简单而autofac的功能相对更丰富(自然也更复杂一点),本篇将基于前几篇已经创建好的webapi项目,引入au ...

  4. 简单解析依赖注入(控制反转)在Spring中的应用

    IoC——Inversion of Control  控制反转DI——Dependency Injection   依赖注入 大家都知道,依赖注入是Spring中非常重要的一种设计模式.可能很多初学者 ...

  5. ASP.NET Core中的依赖注入: 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  6. TypeC一个微软开发的超简单.NET依赖注入/IoC容器

    控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...

  7. Ninject依赖注入——构造函数的注入

    1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-coupled, highly-cohesive)的模块,然后以一种 ...

  8. C++ 简单实现 依赖注入(IOC)

    由于C++ 不支持“反射机制”, 在C++中需要实现依赖注入或控制反转需要增加辅助程序.例如在Windows 开发程序中根据类名动态创建对象,需要在类定义中增加宏.本文主要介绍C++ Ioc的一种实现 ...

  9. 使用Java注解实现简单的依赖注入

    代码如下: /** * 注入的注解,为空,仅起标志作用 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @int ...

  10. Android 使用dagger2进行依赖注入(基础篇)

    0. 前言 Dagger2是首个使用生成代码实现完整依赖注入的框架,极大减少了使用者的编码负担,本文主要介绍如何使用dagger2进行依赖注入.如果你不还不了解依赖注入,请看这一篇. 1. 简单的依赖 ...

随机推荐

  1. 【Java】在树结构中给节点追加数据

    一.功能需求 有个树状组件,展示区域层级,每个区域节点需要展示该地区下的统计信息 从来没做过,给我整不会了属实是 二.功能分析 原型有功能和老系统代码,查看源码后发现的结构框架 1.树组件是自己用ul ...

  2. 图解Java设计模式

    待补充 设计模式介绍 设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式使用的位置 功能模块+框架上. 设计模式在软件中哪里?面向对象( ...

  3. 多智能体路径规划问题 —— Learn all about Multi-Agent Path Finding (MAPF)

    地址: http://mapf.info/index.php/Main/Publications 与其对应的实验室地址: https://www.movingai.com/

  4. Ubuntu18.04动态桌面壁纸variety的安装

    Ubuntu18.04桌面系统,安装动态更换桌面壁纸的应用,即安装软件 variety. variety 的安装: sudo apt install variety 安装好以后就会自动启动. 我们可以 ...

  5. springmvc配置文件中配置mybatis-plus日志输出

    1.背景 2.配置方式 如果application.properties文件格式: #sql日志logging.level.com.XX.XXX.mapper=debug如果是application. ...

  6. OpenTiny HUICharts开源发布,带你了解一个简单、易上手的图表组件库

    摘要:目前 OpenTiny HUICharts 已经成功落地在华为内部100多个产品中,持续提升了用户的可视化体验. 本文分享自华为云社区<OpenTiny HUICharts 正式开源发布, ...

  7. mongodb 中嵌套数组的且查询

    如果在mongodb中存在如下数据 { audit:{ experts:[{expertId:"1",result:"success",......} {exp ...

  8. [APIO2019] 路灯 题解

    LG5445 把询问 \(x,y\) 看作平面上的点 记当前时刻 \(t\),\(l\) 是与 \(i\) 连通的最左端,\(r\) 是与 \(i+1\) 连通的最右端,可以通过 set 维护断边找到 ...

  9. ubuntu 16.04 安装Python3.8虚拟环境

    virtualenv为应用提供了隔离的Python运行环境,可以解决不同应用间多版本的冲突问题. virtualenv会把用户指定版本的python复制到虚拟环境下,并修改相关的环境变量,使得pyth ...

  10. zabbix基本概念

    Zabbix是一个企业级的.开源的.分布式监控解决方案. Zabbix可以监控网络和服务的监控状况. Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题 ...