十二个 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 生成有用文档和帮助页的问题. 它具有诸 ...
随机推荐
- Sql Server中的nvarchar(n)和varchar(n)
刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...
- C#面向插件级别的软件开发 - 开源研究系列文章
在现在的面向对象的分析与设计软件开发过程中,最开始就是面向对象的软件开发.但是,在实际的软件开发过程中,很多都是面向接口的开发方式,这种是一种面向对象开发的模式.但是,今天笔者给大家带来的是面向插件的 ...
- chrome console的使用 : 异常和错误的处理 – Break易站
本文内容来自:chrome console的使用 : 异常和错误的处理 – Break易站 利用 Chrome DevTools 提供的工具,您可以修复引发异常的网页和在 JavaScript 中调试 ...
- 第九章:Python の 网络编程基础(一)
本課主題 何为TCP/IP协议 初认识什么是网络编程 网络编程中的 "粘包" 自定义 MySocket 类 本周作业 何为TCP/IP 协议 TCP/IP协议是主机接入互网以及接入 ...
- [已解决]This dependency was not found: * common/stylus/index.styl in ./src/main.js To install it, you can run: npm install --save common/stylus/index.styl
出现 This dependency was not found: * common/stylus/index.styl in ./src/main.js To install it, you can ...
- commons -lang(2) RandomStringUtils RandomUtils
上一篇是StringUtils 链接http://www.cnblogs.com/tele-share/p/8060129.html 1.RandomStringUtils 1.1模拟实现random ...
- CSS(二) 颜色 盒模型 文字相关 border
一.颜色 rgb(r,g,b) rgb取值 0-255 分别是 色光三元色 red green blue rgba(r,g,b,a) rgb同上 a 是 alpha 代表透明度 colot ...
- weui中的日期选择控件关于时间段的设置!
近日用到了日期控件,但是需要把时和分去掉,功能上是做一个预约的功能,所以只需要在年月日后面提供时间段的选择. BUG在于如果第一次点开弹框而没做任何操作,然后点了其他任意区域则弹框关闭,甚至你的8:0 ...
- sqlalchemy-数据库操作
import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarat ...
- Yii2.0源码阅读-视图(View)渲染过程
之前的文章我们根据源码的分析,弄清了Yii如何处理一次请求,以及根据解析的路由如何调用控制器中的action,那接下来好奇的可能就是,我在控制器action中执行了return $this->r ...