目录

  1. 简单介绍
  2. 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的更多相关文章

  1. 十二个 ASP.NET Core 例子

    原文地址:http://piotrgankiewicz.com/2017/04/17/asp-net-core-12-samples/ 作者:Piotr Gankiewicz 翻译:杨晓东(Savor ...

  2. 十二个 ASP.NET Core 例子——过滤器

    目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...

  3. 十二个 ASP.NET Core 例子——中间件

    目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...

  4. 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建

    core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...

  5. 十二个 ASP.NET Core 例子——配置操作

    目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...

  6. asp.net core 四 IOC&DI Autofac

    其实关于IOC,DI已经有了很多的文章,但是自己在使用中还是有很多困惑,而且相信自己使用下,印象还是会比较深刻的 关于这段时间一直在学习.net core,但是这篇文章是比较重要的,也是我自己觉得学习 ...

  7. 浅谈ASP.NET Core中IOC与DI的理解和使用

    说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生,早前,自己也有尝试过去了解这两个东西,但是一直觉得有点很难去理解,总觉得对其还是模糊不清,所以,趁着今天有空,就去把两个概念 ...

  8. ASP.NET Core修改IOC为Autofac

    如下是我为了了解如何更换ASP.NET Core中的IOC而查找的文章,如果大家英文OK的,可以直接前往阅读,同时也已经有简单的github例子供大家参考. 参考文章: ASP.NET Core文档: ...

  9. 第二十节:Asp.Net Core WebApi生成在线文档

    一. 基本概念 1.背景 使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战. Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题. 它具有诸 ...

随机推荐

  1. MongoDB数据库详解

    第1章 数据库管理系统 1.1 前言 01.数据的定义:文字.图像.地理位置信息(坐标.经纬度)等 02.数据库管理系统的定义:建立.存取和管理数据,保证数据安全和完整性的软件 03.常见的数据库管理 ...

  2. 修改wamp中mysql的默认空密码

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢? 一.打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车. 二.输入"use mysql",意思是使用m ...

  3. 常用的 css reset,基本的base.css

    @charset "utf-8";  html {   overflow-x: hidden;   overflow-y: auto;  }  /*隐藏横向滚动,垂直滚动根据内容自 ...

  4. 关于linux下的date日期,并以日期给文件命名

    在linux的终端中,我们输入date后会有以下显示: 然后博主也扩展了一下date的基础用法: date + "%-": %y 输出年份的后2位:%Y 输出完整年份 %m 输出月 ...

  5. Java学习笔记14(面向对象七:final、static)

    final:意为最终,不可变,是一个修饰词 有时候一个类地功能被开发好了,不想让子类重写,修改,这里就会用到final关键字 final修饰类: 不可以被继承,但是可以继承其他类 示例: public ...

  6. Unity3d 协程

    参考文章: http://blog.csdn.net/onafioo/article/details/48979939 http://www.cnblogs.com/zhaoqingqing/p/37 ...

  7. asp.net mvc 5 蛋疼的问题

    看图,debugger显示匹配路径没有错.    html开源码看 显示没有实现IController. 然而我的确实现了.  关闭vs 重启

  8. 8086cpu中的标志寄存器与比较指令

    在8086CPU中有一个特殊的寄存器--标志寄存器,该寄存器不同于其他寄存器,普通寄存器是用来存放数据的读取整个寄存器具有一定的含义,但是标志寄存器是每一位都有固定的含义,记录在运算中产生的信息,标志 ...

  9. YDKJS:作用域与闭包

    作用域与闭包 什么是作用域 编译器 理解作用域 嵌套的作用域 词法作用域 词法分析时 欺骗词法作用域 函数与块作用域 函数中的作用域 隐藏标识符于普通作用域 函数作为作用域 块作为作用域 提升 先有鸡 ...

  10. 为什么arguments是类数组对象

    为什么JavaScript里函数的arguments只是array-like object? 只是标准这么规定的,还是有什么设计原因在里面?JavaScript的函数里面的arguments对象有 . ...