十二个 ASP.NET Core 例子——IOC
目录
- 简单介绍
- core自带IOC的实现解释
1.简单介绍 (个人理解)
是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了
怎么用:和IOC容器说你这次要哪些类别的类,要用的时候和IOC容器说,IOC容器给你创造出来这个类然后给你[注入和注册]
实现原理:反射和工厂
依赖原则
A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
B.抽象不应该依赖于具体,具体应该依赖于抽象。
注意点:core自带的IOC容器不支持属性注入
2.core自带IOC的实现解释
这里先实现运行起来看看,再解释细节.
a.创建好自己流程中需要实现的哪些类
public interface IGuidService
{
Guid GetID();
} public interface INewAlwaysGuidService :IGuidService
{ }
public interface INewGuidService : IGuidService
{ }
public interface IInstanceGuidService : IGuidService
{ } public class NewAlwaysGuidService : INewAlwaysGuidService
{
public NewAlwaysGuidService()
{
ID =Guid.NewGuid();
} public Guid ID;
public Guid GetID()
{
return ID;
}
}
public class NewGuidService : INewGuidService
{
public NewGuidService()
{
ID = Guid.NewGuid();
}
public Guid ID;
public Guid GetID()
{
return ID;
}
}
public class InstanceGuidService : IInstanceGuidService
{
public InstanceGuidService()
{
ID = Guid.NewGuid();
}
public Guid ID;
public Guid GetID()
{
return ID;
}
}
b.根据自己构思好的流程,先和IOC说你要什么类,注册下
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<INewAlwaysGuidService, NewAlwaysGuidService>();
services.AddScoped<INewGuidService, NewGuidService>();
services.AddSingleton<IInstanceGuidService, InstanceGuidService>();
// Add framework services.
services.AddMvc(options =>
{
//options.Filters.Add(new MyActionFilter()); });
}
c.和IOC说我要哪些类,IOC容器创造好给你
public class HomeController : Controller
{
private INewAlwaysGuidService _newAlwaysGuidService;
private INewGuidService _newGuidService;
private IInstanceGuidService _instanceGuidService; public HomeController(INewAlwaysGuidService a, INewGuidService b, IInstanceGuidService c)
{
_newAlwaysGuidService = a;
_newGuidService = b;
_instanceGuidService = c;
} public IActionResult Index()
{
return new ContentResult{Content=$"{_newAlwaysGuidService.GetID()}\n{_newGuidService.GetID()}\n{_instanceGuidService.GetID()}\n" };
}
}
在注册的时候会发现有三种不同的方法解释下
Transient | 每次都重新创建一个实例。 |
Singleton | 创建一个单例,以后每次调用的时候都返回该单例对象。 |
Scoped | 在当前作用域内,不管调用多少次,都是一个实例,换了作用域就会再次创建实例,类似于特定作用内的单例。 |
每次刷新页面你会看到除了singleton的guid,其他变了.
在注入的时候是构造函数注入,也有属性注入,方法注入等方法.但是core是不支持属性注入了.
十二个 ASP.NET Core 例子——IOC的更多相关文章
- 十二个 ASP.NET Core 例子
原文地址:http://piotrgankiewicz.com/2017/04/17/asp-net-core-12-samples/ 作者:Piotr Gankiewicz 翻译:杨晓东(Savor ...
- 十二个 ASP.NET Core 例子——过滤器
目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...
- 十二个 ASP.NET Core 例子——中间件
目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...
- 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建
core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...
- 十二个 ASP.NET Core 例子——配置操作
目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...
- asp.net core 四 IOC&DI Autofac
其实关于IOC,DI已经有了很多的文章,但是自己在使用中还是有很多困惑,而且相信自己使用下,印象还是会比较深刻的 关于这段时间一直在学习.net core,但是这篇文章是比较重要的,也是我自己觉得学习 ...
- 浅谈ASP.NET Core中IOC与DI的理解和使用
说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生,早前,自己也有尝试过去了解这两个东西,但是一直觉得有点很难去理解,总觉得对其还是模糊不清,所以,趁着今天有空,就去把两个概念 ...
- ASP.NET Core修改IOC为Autofac
如下是我为了了解如何更换ASP.NET Core中的IOC而查找的文章,如果大家英文OK的,可以直接前往阅读,同时也已经有简单的github例子供大家参考. 参考文章: ASP.NET Core文档: ...
- 第二十节:Asp.Net Core WebApi生成在线文档
一. 基本概念 1.背景 使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战. Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题. 它具有诸 ...
随机推荐
- Weblogic用户名密码获取
1.获取服务器上的Weblogic用户名.密码 工具:Xshell 第一步:连接至服务器上,新建目录: mkdir /scripts/DecryptionDemo 第二步:将Decrypt.java放 ...
- leetcode — linked-list-cycle-ii
/** * Source : https://oj.leetcode.com/problems/linked-list-cycle-ii/ * * Given a linked list, retur ...
- python3之装饰器
1.装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处 ...
- 关于对JavaScript待于完善的一些知识点
学习JavaScript也存在一段时间,以下是个人对JavaScript中抽象的知识点记录备案,将有待于后面逐个完善...... 1.JavaScript在内存中的体现(内存中栈堆与基本类型及引用类型 ...
- MyEclipse2015上传项目到GitHub(很详细)
MyEclipse 2015 默认已经安装了git插件,在MyEclipse中上传项目到github的步骤如下: 1.github官网(https://github.com)申请开通账号(略) 1.1 ...
- Kafka、Logstash、Nginx日志收集入门
Nginx作为网站的第一入口,其日志记录了除用户相关的信息之外,还记录了整个网站系统的性能,对其进行性能排查是优化网站性能的一大关键. Logstash是一个接收,处理,转发日志的工具.支持系统日志, ...
- C++返回值优化RVO
返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度.RVO = return value optimization. 测试平台:STM32F103VG + Keil ...
- PC端截取GIF图片的软件
PC端截取GIF图片的软件分享:下载>>
- 搞懂spring事务
最近一个官网的项目,我在service层有两个添加数据的操作,很意外报错了,然后就研究到了事务 之前只是知道声明式事务和编程式事务,编程式的事务显得比较麻烦,一般都是使用声明式事务.. spring提 ...
- Java集合系列[3]----HashMap源码分析
前面我们已经分析了ArrayList和LinkedList这两个集合,我们知道ArrayList是基于数组实现的,LinkedList是基于链表实现的.它们各自有自己的优劣势,例如ArrayList在 ...