十二个 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 生成有用文档和帮助页的问题. 它具有诸 ...
随机推荐
- gitlab 远程 定时备份
=============================================== 2017/11/1_第2次修改 ccb_warlock 更新 ...
- ADB 安卓开发配置环境
下载完后将名称中含有adb的文件,和fastboot.exe复制到 c:/windows/system32目录 或c:/windows/system64目录(看自己电脑系统配置 如电脑64操作系统就写 ...
- C#-判断Shift,Alt,Ctrl是否被按下,确定所按下的组合键
在创建接受用户击键的应用程序时,您还可能希望监视 SHIFT.ALT 和 CTRL 键等组合键.当一个组合键与其他键同时按下,或在单击鼠标的同时按下时,您的应用程序能够做出适当响应:字母 S 可能仅导 ...
- Python 项目实践三(Web应用程序)第五篇
接着上节继续学习,在这一节,我们将建立一个用户注册和身份验证系统,让用户能够注册账户,进而登录和注销.我们将创建一个新的应用程序,其中包含与处理用户账户相关的所有功能.我们还将对模型Topic稍做修改 ...
- VS的使用插件
1. 插件安装: 1) productivity power tools:代码查看优化插件: 2) Visaul Studio Color Theme Editor 主题修改插件: 3) VS ...
- Oracle绑定变量优缺点
参考:http://f.dataguru.cn/thread-208881-1-1.html 参考:http://blog.sina.com.cn/s/blog_4d9ece9a0100caw8.ht ...
- 见招拆招-PostgreSQL中文全文索引效率优化
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- [Spark内核] 第30课:Master的注册机制和状态管理解密
本課主題 Master 接收 Worker, Driver, Application Master 处理 Driver 狀态变换 Master 处理 Executor 狀态变换 [引言部份:你希望读者 ...
- linux无密码连接
先确保所有主机的防火墙处于关闭状态. 在主机A上执行如下: 1. $cd ~/.ssh 2. $ssh-keygen -t rsa -----然后一直按回车键,就会按照默认的选项将生成的密钥保存在. ...
- Babel 转码器 § es6转换es5
Babel 转码器 § es6转换es5 实时转码 / Repl -babel-node / babel-register(自动转码引入babel-register模块) 配置文件.babelrc ...