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. 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的

    原文:[C#]WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的 初学WPF,知道一些控件可以通过定义Style的Trigger改变要显示的样式,但是 ...

  2. 命名管道的C#实现

    1.    命名管道简介 "命名管道"或"命名管线"(Named Pipes)是一种简单的进程间通信(I P C)机制,Microsoft Windows NT ...

  3. How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?

    原文 https://stackoverflow.com/questions/28240528/how-do-i-duplicate-a-resource-reference-in-code-behi ...

  4. C++的中英文字符串表示(string,wstring),使用wcout.imbue(std::locale("chs"));本地化解析编码

    在C++中字符串类的string的模板原型是basic_string template <class _Elem, class traits = char_traits<_Elem> ...

  5. Delphi Android 将Google ZXing 整合(调用Jar文件)

    前篇文章介绍了在delphi App(以下简称App)中可使用intent来调用Google ZXing 条码扫描器(以下简称zx),其各有优缺点,优点是我们不需关注zx本身的细节,只需调用其接口即可 ...

  6. MySql5.7.11 for Windows 安装(二)

    原文:MySql5.7.11 for Windows 安装(二) 安装之后,首先创建data文件夹(旧版本本来就有),管理员打开cmd,cd到bin文件夹,输入 mysqld –initialize- ...

  7. Failed to recover corrupt cache entry

    RangeError java.lang.RuntimeException: ERROR: Failed to recover corrupt cache entry at com.sun.deplo ...

  8. 使用Advanced Installer 13.1打包发布 Windows Service服务程序

    原文: 使用Advanced Installer 13.1打包发布 Windows Service服务程序 项目中需要用到一个定时推送案件状态的需求,本人小菜一只,在同事建议下要写成一个windows ...

  9. Android零基础入门第70节:ViewPager轻松完成TabHost效果

    上一期学习了ViewPager的简单使用,本期一起来学习ViewPager的更多用法. 相信很多同学都使用过今日头条APP吧,一打开主界面就可以看到顶部有很多Tab,然后通过左右滑动来切换,就可以通过 ...

  10. 使用Visual Studio Code创建第一个ASP.NET Core应用程序

    全文翻译自:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 这篇文章将向你展示如何在Mac上写出你的第一个A ...