.Net Core 学习依赖注入自定义Service
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的更多相关文章
- dotnet core在Task中使用依赖注入的Service/EFContext
C#:在Task中使用依赖注入的Service/EFContext dotnet core时代,依赖注入基本已经成为标配了,这就不多说了. 前几天在做某个功能的时候遇到在Task中使用EF DbCon ...
- 【半小时大话.net依赖注入】(下)详解AutoFac+实战Mvc、Api以及.NET Core的依赖注入
系列目录 上|理论基础+实战控制台程序实现AutoFac注入 下|详解AutoFac+实战Mvc.Api以及.NET Core的依赖注入 前言 本来计划是五篇文章的,每章发个半小时随便翻翻就能懂,但是 ...
- ASP.NET Core之依赖注入
本文翻译自:http://www.tutorialsteacher.com/core/dependency-injection-in-aspnet-core ASP.NET Core支持依赖注入,依赖 ...
- [Android]使用Dagger 2依赖注入 - 自定义Scope(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5095426.html 使用Dagger 2依赖注入 - 自定义 ...
- 几十行代码实现ASP.NET Core自动依赖注入
在开发.NET Core web服务的时候,我们习惯使用自带的依赖注入容器来进行注入. 于是就会经常进行一个很频繁的的重复动作:定义一个接口->写实现类->注入 有时候会忘了写Add这一步 ...
- 重新整理 .net core 实践篇————依赖注入应用[二]
前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题, ...
- web API .net - .net core 对比学习-依赖注入
今天我们来看一下 .net web api 和 .net core web api依赖注入机制的差异. 首先我们分别在.net web api 和 .net core web api新建文件夹Serv ...
- Asp.Net Core 3.1学习-依赖注入、服务生命周期(6)
1.前言 面向对象设计(OOD)里有一个重要的思想就是依赖倒置原则(DIP),并由该原则牵引出依赖注入(DI).控制反转(IOC)及其容器等概念.在学习Core依赖注入.服务生命周期之前,下面让我们先 ...
- .NET Core的依赖注入[1]: 控制反转
写在前面:我之前写过一系列关于.NET Core依赖注入的文章,由于.NET Core依赖注入框架的实现原理发生了很大的改变,加上我对包括IoC和DI这些理论层面的东西又有了一些新的理解,所以我在此基 ...
随机推荐
- p批处理替换目录下文本中的字符串
@echo off rem 进入批处理文件所在的路径 cd C:\Users\zxh\Desktop\ " as "abc" ***** rem 定义要替换的新旧字符串 ...
- 【shell】分享高通平台刷版本简单的一个shell脚本
#!/bin/shadb wait-for-deviceadb reboot bootloaderecho "start download"wait 5sudo fastboot ...
- 使用scratchbox2建立交叉编译环境
使用scratchbox2建立交叉编译环境,使交叉编译不再烦人..... os:ubuntu 12.04.4 x64 1. 安装相关工具sudo apt-get install debootstrap ...
- Android零基础入门第71节:CardView简单实现卡片式布局
还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...
- win32内存调用图
https://msdn.microsoft.com/en-us/library/ms810603.aspxhttps://www.codeproject.com/Articles/14525/Hea ...
- C#委托和事件 EventHandle和EventArgs
一.背景由于对于C#委托和事件理解的不够透彻,并且平时工作中对于自己手写委托和事件很少,渐渐的只会增删改查了.特定整理了委托和事件的基本知识.二.案例案例引用了张逸 博客 中的案例,并做了处理. 创建 ...
- python读取json文件并解析
# -*- coding: utf-8 -*- import os import json import sys reload(sys) sys.setdefaultencoding('utf-8') ...
- Linux上read命令的使用
一:read倾听是一种美德 1.倾听键盘的输入并保存到变量中 例如:#! /bin/bash echo "please inpu ...
- 学习过程中遇到的python内置函数,后续遇到会继续补充进去
1.python内置函数isinstance(数字,数字类型),判断一个数字的数字类型(int,float,comple).是,返回True,否,返回False2.python内置函数id()可以查看 ...
- Scala 学习之路(一)—— Scala简介及开发环境配置
一.Scala简介 1.1 概念 Scala全称为Scalable Language,即“可伸缩的语言”,之所以这样命名,是因为它的设计目标是希望伴随着用户的需求一起成长.Scala是一门综合了面向对 ...