1. 定义一个服务,包含一个方法

  1. public class TextService
  2. {
  3. public string Print(string m)
  4. {
  5. return m;
  6. }
  7. }

2. 写一个扩展方法用来注入服务

  1. using Haos.Develop.CoreTest.Service;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Haos.Develop.CoreTest
  9. {
  10. public static class Extension
  11. {
  12. public static IServiceCollection AddTestService(this IServiceCollection service)
  13. {
  14. return service.AddScoped(factory => new TextService());
  15. }
  16. }
  17. }

3. 回到Startup类中找到ConfigureServices方法添加如下代码

  1. // This method gets called by the runtime. Use this method to add services to the container.
  2. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
  3. public void ConfigureServices(IServiceCollection services)
  4. {
  5. services.AddMvc();
  6. services.AddTestService();//手动高亮
  7. }

4.我们可以采用构造函数方式来使用或者方法用参数的形式注入和直接获取

  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Newtonsoft.Json;
  7. using Haos.Develop.CoreTest.Service;
  8.  
  9. namespace Haos.Develop.CoreTest.Controllers
  10. {
  11.  
  12. public class HomeController : Controller
  13. {
  14. public TextService T;
  15.  
  16. public HomeController(TextService t)
  17. {
  18. T = t;
  19. }
  20.  
  21. public ActionResult Index()
  22. {
  23. return Content("ok");
  24. }
  25. /// <summary>
  26. /// 使用构造函数注入
  27. /// </summary>
  28. /// <returns></returns>
  29. public JsonResult Test()
  30. {
  31. T.Print("哈哈哈哈哈哈哈哈哈哈哈哈");
  32. return Json("");
  33. }
  34. /// <summary>
  35. /// 参数注入
  36. /// </summary>
  37. /// <param name="t2"></param>
  38. /// <returns></returns>
  39. public JsonResult Test2(TextService t2)
  40. {
  41. t2.Print("哈哈哈哈哈哈哈哈哈哈哈哈");
  42. return Json("");
  43. }
  44. /// <summary>
  45. /// 直接获取
  46. /// </summary>
  47. /// <returns></returns>
  48. public JsonResult Test3()
  49. {
  50. var t3 = HttpContext.RequestServices.GetService(typeof(TextService)) as TextService;
  51. t3.Print("哈哈哈哈哈哈哈哈哈哈哈哈");
  52. return Json("");
  53. }
  54. }
  55. }

5. 如果存在参数可以在构造函数中赋值

示例:

5.1 修改第一点的代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5.  
  6. namespace Haos.Develop.CoreTest.Service
  7. {
  8. public class TextService
  9. {
  10. public string StrString { get; set; }
  11.  
  12. public TextService(string m)
  13. {
  14. StrString = m;
  15. }
  16.  
  17. public string Print(string m)
  18. {
  19. return StrString + m;
  20. }
  21. }
  22. }

5.2 修改第二点的代码

  1. using Haos.Develop.CoreTest.Service;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Haos.Develop.CoreTest
  9. {
  10. public static class Extension
  11. {
  12. public static IServiceCollection AddTestService(this IServiceCollection service,string str)
  13. {
  14. return service.AddScoped(factory => new TextService(str));
  15. }
  16. }
  17. }

最后注入

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddTestService("this test param");
  4. }

6 生命周期

6.1 瞬时(Transient)

生命周期服务在它们每次请求时被创建。这一生命周期适合轻量级的,无状态的服务。

6.2 作用域(Scoped)

作用域生命周期服务在每次请求被创建一次。

6.3 单例(Singleton)

单例生命周期服务在它们第一次被请求时创建并且每个后续请求将使用相同的实例。

.Net Core 学习依赖注入自定义Service的更多相关文章

  1. dotnet core在Task中使用依赖注入的Service/EFContext

    C#:在Task中使用依赖注入的Service/EFContext dotnet core时代,依赖注入基本已经成为标配了,这就不多说了. 前几天在做某个功能的时候遇到在Task中使用EF DbCon ...

  2. 【半小时大话.net依赖注入】(下)详解AutoFac+实战Mvc、Api以及.NET Core的依赖注入

    系列目录 上|理论基础+实战控制台程序实现AutoFac注入 下|详解AutoFac+实战Mvc.Api以及.NET Core的依赖注入 前言 本来计划是五篇文章的,每章发个半小时随便翻翻就能懂,但是 ...

  3. ASP.NET Core之依赖注入

    本文翻译自:http://www.tutorialsteacher.com/core/dependency-injection-in-aspnet-core ASP.NET Core支持依赖注入,依赖 ...

  4. [Android]使用Dagger 2依赖注入 - 自定义Scope(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5095426.html 使用Dagger 2依赖注入 - 自定义 ...

  5. 几十行代码实现ASP.NET Core自动依赖注入

    在开发.NET Core web服务的时候,我们习惯使用自带的依赖注入容器来进行注入. 于是就会经常进行一个很频繁的的重复动作:定义一个接口->写实现类->注入 有时候会忘了写Add这一步 ...

  6. 重新整理 .net core 实践篇————依赖注入应用[二]

    前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题, ...

  7. web API .net - .net core 对比学习-依赖注入

    今天我们来看一下 .net web api 和 .net core web api依赖注入机制的差异. 首先我们分别在.net web api 和 .net core web api新建文件夹Serv ...

  8. Asp.Net Core 3.1学习-依赖注入、服务生命周期(6)

    1.前言 面向对象设计(OOD)里有一个重要的思想就是依赖倒置原则(DIP),并由该原则牵引出依赖注入(DI).控制反转(IOC)及其容器等概念.在学习Core依赖注入.服务生命周期之前,下面让我们先 ...

  9. .NET Core的依赖注入[1]: 控制反转

    写在前面:我之前写过一系列关于.NET Core依赖注入的文章,由于.NET Core依赖注入框架的实现原理发生了很大的改变,加上我对包括IoC和DI这些理论层面的东西又有了一些新的理解,所以我在此基 ...

随机推荐

  1. 百度网盘web端项目总结

    项目背景 网盘作为一个在线备份存储,共享文件的工具类产品,给人们的工作和生活带来了很大的帮助和便利.百度网盘是目前国内使用量最大的网盘产品,至今发展已有4年,总用户数超4亿,为了让用户有着更好的使用体 ...

  2. C# ACCESS 查询提示“至少一个参数没有被指定”问题

    错误的SQL指令如下: sqlStr = “select * from  tb_userInfo where userName=” + userName;    //错误的 sql 指令 正确的SQL ...

  3. LockWindowUpdate

     //锁住listview防止反复刷新              LockWindowUpdate(Self.lvsearch.Handle);    貌似不太行,多用几下就卡住了  那个函数几乎不用 ...

  4. Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?

    原始链接:Introduction: Why Google C++ Testing Framework? 词汇表 版本号:v_0.1 介绍:为什么使用GTest? GTest帮助你写更好的C++测试代 ...

  5. C# — WinForm TCP连接IPv4和IPv6的判断

    大家都知道, XP系统默认使用的是IPv4格式的IP地址, 而Win7系统默认使用的是IPv6格式的IP地址. 所以有些关于TCP连接的WinForm系统,在XP下可能运行正常,但在Win7下却不能运 ...

  6. Python连载9-setup环境变量&os模块

    一.timeit包(上接连载9) 1.我们对于timeit函数,可采取如下例子: h = ''' def doTt(num1): for i in range(num1): print(i) ''' ...

  7. 七、Linux磁盘管理及LVM讲解

      1.硬盘接口 IDE:家用产品,也部分应用于服务器 SATA:一般使用 SCSI:服务器市场 SAS:高端服务器上,价格昂贵  2.硬盘种类 SATA硬盘: SCSI硬盘: SAS硬盘: 3.分区 ...

  8. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

    在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...

  9. Tido 习题-二叉树-最高分

    题目描述 老师想知道从某某同学到某某同学当中,分数最高的是多少.现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入 输入包含多组测试数据.每组输入第一行是两个正整数N和M(0& ...

  10. Unity 通用透明物体漫反射Shader(双面渲染&多光源&光照衰减&法线贴图&凹凸透明度控制)

    Shader "MyUnlit/AlphaBlendDiffuse" { Properties { _Color("Color Tint(贴图染色)",Colo ...