目录

  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. vue2.0的瀑布流组件-使用说明

    做一个小项目,需要瀑布流,就选他了,先看看效果 使用瀑布流布局组件:vue-waterfall-easy 下载引入: 方式一:直接从git上复制组件的完整代码,引入vue组件文件即可 import v ...

  2. fastq,sam文件一些小结(持续补充。。。)

    ST-E00211::H5L3NCCXY:::: chr14 141M = - ACTTCACCTCCTGGAGTCCTGGACTTCCCCACATCTCCCCTGCCCCTCCCACGTTTCCAT ...

  3. 房上的猫:JavaDoc注释

    //这是一个注释 /*   *这是一个演示程序   */ /**    *@这是JavaDoc注释.   */ JavaDoc注释 背景: javadoc是Sun公司提供的一个技术,它从程序源代码中抽 ...

  4. leetcode — linked-list-cycle

    /** * Source : https://oj.leetcode.com/problems/linked-list-cycle/ * * Given a linked list, determin ...

  5. angular4——安装

    本文同样适用于NG4,最近开始学ng2了,前端小白一枚啊,做过安卓开发,做过java写的服务器啊,热爱前端啊,所以就开坑了,入坑之前建议先学下es6哦,学完后看下typescript哦,正所谓,前面基 ...

  6. amaze UI 笔记 - JS

    导航添加依据 http://amazeui.org/javascript 下面内容属学习笔记,如有理解偏差和错误请留言相告,感谢!* =(官网这块写的很详细) 一 .UI增强 1.警告框 显示可关闭的 ...

  7. webapi框架搭建-创建项目(三)-webapi owin

    上一篇:创建项目(二) 在上一篇里,我们已经创建好了webapi应用,并已经部署到iis里,本篇讲如何用owin自宿主或是iis宿主来部署webapi应用. owin介绍 传统的asp.net网站只能 ...

  8. windows 纤程

    纤程本质上也是线程,是多任务系统的一部分,纤程为一个线程准并行方式调用多个不同函数提供了一种可能,它本身可以作为一种轻量级的线程使用.它与线程在本质上没有区别,它也有上下文环境,纤程的上下文环境也是一 ...

  9. wifipineapple插件:codeInject的使用

    如果在中间人攻击的时候, 能在用户的网页中插入任意代码, 可以说已经完成一半了 wifipineapple有个codeInject插件, 可以让连上这个网络所有设备浏览网页的时候, 在网页中插入任意h ...

  10. centos7下固定IP(静态IP)网络配置

    关于centos下网络配置(这里使用静态IP方法) 动态ip网络配置可参考我的另一篇博文http://www.cnblogs.com/albertrui/p/7811868.html 1.编辑/etc ...