Author:think

Date:2021-12-18

参考文章:12. 依赖注入/控制反转 | Furion (gitee.io)

环境信息

  • Furion版本:2.20.6
  • 框架模板:Furion.Template.Api
  • 测试项目名称:DITest

实现步骤

项目(解决方案)初始结构如下:

注意的是,上面说的项目和Visual Studio中的项目有点区别。

创建一个新的服务

我们可以仿照模板自带的一个服务目录结构来创建一个新的服务,其中Dto层暂时用不到,因此可以忽略。我们新创建一个SayHello的服务,目录结构如下图所示:

ISayHelloService.cs文件

这是一个接口文件,同时也是最开始创建的一个文件。下方的SayHelloService.cs文件需要继承该文件,这一步是依赖注入实现的重要前期准备工作。ISayHelloService.cs文件内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DITest.Application.SayHello.Services
{public interface ISayHelloService{string say();}
}

SayHelloService.cs文件

这是存放我们程序的业务逻辑的文件,该文件需要继承ISayHelloService接口,并且全部实现接口中存在的方法,同时需要注意的是该文件中的主类还需要继承一个非常重要的接口ITransient,这表明这个是注入的对象生存期为瞬时SayHelloService.cs文件内容如下:

using Furion.DependencyInjection;namespace DITest.Application.SayHello.Services
{public class SayHelloService : ISayHelloService, ITransient{public string say(){return "你好,世界!";}}
}

SayHelloAppService.cs文件

该文件属于控制器Controller层,主要是对外提供WebAPI接口的。在该文件中通过构造方法实现依赖注入

  • 首先声明一个空的接口对象:

    private readonly ISayHelloService _sayHelloService;
    
  • 随后通过构造方法对其进行实例化:

    public SayHelloAppService(ISayHelloService sayHelloService)
    {_sayHelloService = sayHelloService;
    }
    
  • 最后在方法中即可使用该对象:

    /// <summary>
    /// SayHello测试
    /// </summary>
    /// <returns></returns>
    public string getSayHello()
    {return _sayHelloService.say();
    }
    

SayHelloAppService.cs文件内容如下:

using DITest.Application.SayHello.Services;
using DITest.Web.Core.SayHi;
using Furion.DynamicApiController;namespace DITest.Application.SayHello
{public class SayHelloAppService : IDynamicApiController{private readonly ISayHelloService _sayHelloService;public SayHelloAppService(ISayHelloService sayHelloService){_sayHelloService = sayHelloService;}/// <summary>/// SayHello测试/// </summary>/// <returns></returns>public string getSayHello(){return _sayHelloService.say();}}
}

运行结果

总结

依赖注入是比较高效的对象创建方式,本篇文章旨在介绍利用Furion框架实现一个简单的依赖注入的例子。学会这个简单的实现方法后,基本上其他的方法就能够更快的入手了,这样我们可以更快的拥抱新技术,提高我们的开发质量与程序效率!

.NET Core基于Furion框架实现依赖注入相关推荐

  1. 如何在.NET Core控制台程序中使用依赖注入

    背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...

  2. 详解Spring框架的依赖注入

    本篇主要介绍Spring的依赖注入.依赖注入是Spring协调不同Bean实例之间的合作而提供的一种工作机制,在确保Bean实例之间合作的同时,并能保持每个Bean的相对独立性.通过本篇的学习,可以达 ...

  3. 详解 Spring 框架的依赖注入

    本篇主要介绍 Spring 的依赖注入.依赖注入是 Spring 协调不同 Bean 实例之间的合作而提供的一种工作机制,在确保 Bean 实例之间合作的同时,并能保持每个 Bean 的相对独立性.通 ...

  4. ASP.NET Core - 在ActionFilter中使用依赖注入

    上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的,所以花了点时间仔细阅读了微软的官方文档.发现除了IActionFilter.I ...

  5. [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式

    IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照"好莱坞法则"实现应用程序的代码与框架之间的交互.我们可以采用若干设计模式 ...

  6. ASP.NET Core MVC 控制器创建与依赖注入

    在我最后一篇关于 ASP.NET Core 释放IDsiposable对象的文章(中文.英文原文)中,Mark Rendle 指出,MVC 控制器在请求结束时也会释放资源.乍一看,此范围内的资源在请求 ...

  7. NetCore框架详解 -------四、.NetCore框架对依赖注入原则 的技术实现和运行原理

    前三章主要从理论角度讲述了依赖注入原则及所衍生实现技术和手段产生的原因.发展和当前所处状况.大部分开发人为前三章对自己的技术水平的提高设有立竿见影的直接作用,但的我在里还是要说一下,前三章不但可以使开 ...

  8. ASP.NET Core应用的7种依赖注入方式

    ASP.NET Core框架中的很多核心对象都是通过依赖注入方式提供的,如用来对应用进行初始化的Startup对象.中间件对象,以及ASP.NET Core MVC应用中的Controller对象和V ...

  9. .NET Core中Quartz.NET的依赖注入

    目录 介绍 项目概况 创建配置文件 使用构造函数注入 使用选项模式 结论 介绍 Quartz.NET是一个方便的库,允许您通过实现IJob接口来安排重复任务.然而,它的局限性在于,默认情况下,它仅支持 ...

最新文章

  1. 项目构建之maven篇:2.HelloWorld项目构建过程
  2. 使用Mysql数据库完成增删改查综合案例(JSP页面)
  3. Java的TheadLocal使用
  4. 江苏省事业单位计算机入面分数线,2020江苏事业单位统考周日笔试,考多少分进面?...
  5. 从零开始学视觉Transformer (10):目标检测DETR-1
  6. PyCharm汉化后无法打开Settings设置
  7. 同样是软件测试工程师,为什么性能测试月薪更高?
  8. 测试类什么时候初始化
  9. C# 导出Excel 多个Sheet
  10. chrome 打开默认页 被篡改_chrome启动页被篡改怎么办_chrome浏览器启动页全被劫持处理方法-win7之家...
  11. swiper的小bug slideTo方法不触发slideChangeTransitionStart(swiper)
  12. 运行时 Entry name .... .. collided
  13. 通过SSH终端管理ESXI虚拟机
  14. 渠道商用假量冒充真实用户:开发者求给条活路
  15. 【AR\VR开发基础】GLSL初步学习①
  16. ReactNative ./gradlew assembleRelease打包失败Duplicate file
  17. kafka监控api,手撕面试官
  18. 微电子电路——例题期末总结
  19. 为什么复制的门禁卡只能用一次_手机NFC为什么可以复制小区用的门禁卡?
  20. 课程设计:基于JavaWeb的名片管理系统

热门文章

  1. 基础训练:龟兔赛跑预测
  2. 4. “强人”的“皮球”生涯
  3. 前端开发精华网站(强烈推荐!)
  4. 注册 @live.com @msn.com邮箱
  5. 素雅的登录界面,简单而优雅
  6. Gym - 102263 B - Road to Arabella
  7. cad lisp 两侧偏移并删除_cad lisp 两侧偏移并删除_知道这些技巧-轻松攻克CAD所有困难...
  8. 用手机如何把PDF转成PPT文件
  9. 计算机中颜色质量,win10系统更改颜色质量的操作技巧
  10. Android通过反射EthernetManager Api设置以太网为静态IP地址或者动态获取IP