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

public class TextService
{
public string Print(string m)
{
return m;
}
}

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

using Haos.Develop.CoreTest.Service;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest
{
public static class Extension
{
public static IServiceCollection AddTestService(this IServiceCollection service)
{
return service.AddScoped(factory => new TextService());
}
}
}

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

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

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

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Haos.Develop.CoreTest.Service; namespace Haos.Develop.CoreTest.Controllers
{ public class HomeController : Controller
{
public TextService T; public HomeController(TextService t)
{
T = t;
} public ActionResult Index()
{
return Content("ok");
}
/// <summary>
/// 使用构造函数注入
/// </summary>
/// <returns></returns>
public JsonResult Test()
{
T.Print("哈哈哈哈哈哈哈哈哈哈哈哈");
return Json("");
}
/// <summary>
/// 参数注入
/// </summary>
/// <param name="t2"></param>
/// <returns></returns>
public JsonResult Test2(TextService t2)
{
t2.Print("哈哈哈哈哈哈哈哈哈哈哈哈");
return Json("");
}
/// <summary>
/// 直接获取
/// </summary>
/// <returns></returns>
public JsonResult Test3()
{
var t3 = HttpContext.RequestServices.GetService(typeof(TextService)) as TextService;
t3.Print("哈哈哈哈哈哈哈哈哈哈哈哈");
return Json("");
}
}
}

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

示例:

5.1 修改第一点的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest.Service
{
public class TextService
{
public string StrString { get; set; } public TextService(string m)
{
StrString = m;
} public string Print(string m)
{
return StrString + m;
}
}
}

5.2 修改第二点的代码

using Haos.Develop.CoreTest.Service;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest
{
public static class Extension
{
public static IServiceCollection AddTestService(this IServiceCollection service,string str)
{
return service.AddScoped(factory => new TextService(str));
}
}
}

最后注入

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

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. php 将一个二维数组中两个相同的value 相同 指定值相加

    array(3) { [0]=> array(7) { ["mlid"]=> int(1) ["num"]=> int(1) ["c ...

  2. C++调用Python浅析

    环境 VS2005Python2.5.4 Windows XP SP3 简述 一般开发过游戏的都知道Lua和C++可以很好的结合在一起,取长补短,把Lua脚本当成类似动态链接库来使用,很好的利用了脚本 ...

  3. QML中文件的加载(三种方法)

    在这里小小总结一下QML文件中如何加载QML文件与JavaScript文件. 1.QML文件中加载JavaScript文件 语法: import <ModuleIdentifier> &l ...

  4. UWP入门(八)--几个简单的控件

    原文:UWP入门(八)--几个简单的控件 每天看几个,要不聊几天我就可以看完啦,加油! 看效果 1. CheckBox <TextBlock Grid.Row="0" Tex ...

  5. 三星860 evo 250g 开启AHCI模式读写对比

    主板比较老,只支持sata2接口 换用三星860evo后跑分对比

  6. SSL Converter & Formats

    https://www.sslshopper.com/ssl-converter.html PEM Format The PEM format is the most common format th ...

  7. 让VC2012生成的程序支持XP系统(修改mkspecs\win32-msvc2012\qmake.conf,QT的DLL都是支持XP的,只与EXE有关)good

    如果用的编译器是VC2012以上,那么默认生成出的程序是不能运行在XP系统上的.所以需要修改链接参数 我们要做的是修改qmake.conf文件中的参数,文件路径根据开发环境不同而不同下面以5.1.1 ...

  8. DelphiRemotePushSender

    Sending iOS (and Android) remote push notifications from your Delphi service with the HTTP/2 protoco ...

  9. 初探 C# 8 的 Nullable Reference Types

    溫馨提醒:本文提及的 C# 8 新功能雖已通過提案,但不代表將來 C# 8 正式發布時一定會納入.這表示我這篇筆記有可能白寫了,也表示您不必急著瞭解這項新功能的所有細節,可能只要瞄一下底下的「概要」說 ...

  10. Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)

    概念介绍 无限加载与瀑布流的结合在Web前端开发中的效果非常新颖,对于网页内容具备较好的表现形式.无限加载并没有一次性将内容全部加载进来,而是通过监听滚动条事件来刷新内容的.当用户往下拖动滚动条或使用 ...