全面理解 ASP.NET Core 依赖注入

DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚。另外再介绍一下.NET  Core的DI实现以及对实例生命周期的管理(这个是经常面试会问到的问题)。最后再给大家简单介绍一下在控制台以及Mvc下如何使用DI,以及如何把默认的Service Container 替换成Autofac。 我录了一些关于ASP.NET Core的入门视频:有兴趣的同学可以去看看。  http://www.cnblogs.com/jesse2013/p/aspnetcore-videos.html 一、什么是依赖注入 1.1 依赖 1.2 什么注入 为什么反转 何为容器 二、.NET Core DI 2.1 实例的注册 2.2 实例生命周期之单例 2.3 实例生命周期之Tranisent 2.4 实例生命周期之Scoped 三、DI在ASP.NET Core中的应用 3.1 在Startup类中初始化 3.2 Controller中使用 3.3 View中使用 3.4 通过HttpContext来获取 四、如何替换其它的Ioc容器 一、什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Control),DI等概念搞晕。 1.1依赖 当一个类需要另一个类协作来完成工作的时候就产生了依赖。比如我们在AccountController这个控制器需要完成和用户相关的注册、登录 等事情。其中的登录我们由EF结合Idnetity来完成,所以我们封装了一个EFLoginService。这里AccountController就有一个ILoginService的依赖。 这里有一个设计原则:依赖于抽象,而不是具体的实现。所以我们给EFLoginService定义了一个接口,抽象了LoginService的行为。 1.2 什么是注入 注入体现的是一个IOC(控制反转的的思想)。在反转之前 ,我们先看看正转。 AccountController自己来实例化需要的依赖。 1 2 3 4 5 private ILoginService<ApplicationUser> _loginService; public AccountController() {   _loginService = new EFLoginService() }   大师说,这样不好。你不应该自己创建它,而是应该由你的调用者给你。于是你通过构造函数让外界把这两个依赖传给你。 1 2 3 4 5 public  AccountController(ILoginService<ApplicationUser> loginService) {   _loginService = loginService; }   把依赖的创建丢给其它人,自己只负责使用,其它人丢给你依赖的这个过程理解为注入。 1.3 为什么要反转? 为了在业务变化的时候尽少改动代码可能造成的问题。 比如我们现在要把从EF中去验证登录改为从Redis去读,于是我们加了一个 RedisLoginService。这个时候我们只需要在原来注入的地方改一下就可以了。 1 2 […]

龙生   05 Sep 2018
View Details

springboot 2.0 使用redis

由于还使用elasticsearch,所以使用jedis没有使用lettuce 不然两个会冲突 1.pom引入

2.配置走一波,2.0版本之前的一些被移除了,我使用jedis就配置jedis了,使用lettuce的话一个样,换个名字就行

3.redis config走一波

4.jedis config 走一波

5.然后直接用就行了

  from:https://blog.csdn.net/wangh92/article/details/79626969

龙生   04 Sep 2018
View Details

Orchard Core一分钟搭建ASP.NET Core CMS

Orchard Core 是Orchard CMS的ASP.NET Core版本。 Orchard Core是全新一代的ASP.NET Core CMS。 官方文档介绍:http://orchardcore.readthedocs.io/en/latest/ GitHub: https://github.com/OrchardCMS/OrchardCore 下面快速开始搭建CMS 新建项目 打开VS2017 新建一个CMSWeb的ASP.NET Core Web应用程序 然后选择空模板 安装OrchardCore包 NuGet包命令 目前预览版需加 -Pre Install-Package OrchardCore.Application.Cms.Targets -Pre 或者在NuGet搜索 OrchardCore.Application.Cms.Targets   项目开发 打开Startup.cs ,在ConfigureServices加入

然后删除Configure 中的

加入

最终如下:

然后运行程序,打开浏览会看到初始化安装界面。输入对应信息,然后完成安装。   注意密码必须包含大小写数字和字符才能成功提交。如上图中出现红色是不行的。 安装好后配置一下,最终如下:   后台为/Admin ,可以进入查看相关设置。 Orchard Core Framework:ASP.NET Core 模块化,多租户框架。 《ASP.NET Core跨平台开发从入门到实战》 京东淘宝亚马逊当当 博客示例代码GitHub:https://github.com/linezero/Blog from:https://www.cnblogs.com/linezero/p/OrchardCore.html

龙生   04 Sep 2018
View Details

Spring Boot(三):Spring Boot 中 Redis 的使用

Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化。 Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储。相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化。除此之外,Redis 还提供一些类数据库的特性,比如事务,HA,主从库。可以说 Redis 兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍 Redis 在 Spring Boot 中两个典型的应用场景。 如何使用 1、引入依赖包

Spring Boot 提供了对 Redis 集成的组件包:spring-boot-starter-data-redis,spring-boot-starter-data-redis依赖于spring-data-redis 和 lettuce 。Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce,但如果你从 Spring Boot 1.5.X 切换过来,几乎感受不大差异,这是因为 spring-boot-starter-data-redis 为我们隔离了其中的差异性。 Lettuce 是一个可伸缩线程安全的 Redis 客户端,多个线程可以共享同一个 RedisConnection,它利用优秀 netty NIO 框架来高效地管理多个连接。   2、添加配置文件

  3、添加 cache 的配置类

注意我们使用了注解:@EnableCaching来开启缓存。   3、好了,接下来就可以直接使用了

以上都是手动使用的方式,如何在查找数据库的时候自动使用缓存呢,看下面;   4、自动根据方法生成缓存

其中 value 的值就是缓存到 Redis 中的 key   共享 Session 分布式系统中,Session 共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一, Spring Session 官方说明 Spring Session provides an API and implementations for […]

龙生   03 Sep 2018
View Details

RabbitMQ与AMQP协议详解

1. 消息队列的历史 了解一件事情的来龙去脉,将不会对它感到神秘。让我们来看看消息队列(Message Queue)这项技术的发展历史。 Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the information bus(TIB)。 TIB被电信和通讯公司采用,路透社收购了Teknekron公司。之后,IBM开发了MQSeries,微软开发了Microsoft Message Queue(MSMQ)。这些商业MQ供应商的问题是厂商锁定,价格高昂。2001年,Java Message queuing试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了。 于是2004年,摩根大通和iMatrix开始着手Advanced Message Queuing Protocol (AMQP)开放标准的开发。2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。 目前RabbitMQ的最新版本为3.5.7,基于AMQP 0-9-1。 RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发concurrent和distribution系统的一种语言,在电信领域使用广泛。OTP(Open Telecom Platform)作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件/库/工具,如mnesia/SASL,极大方便了Erlang应用的开发。OTP就类似于Python语言中众多的module,用户借助这些module可以很方便的开发应用。 2. AMQP messaging 中的基本概念 Broker: 接收和分发消息的应用,RabbitMQ Server就是Message Broker。 Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。 Connection: publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题。 Channel: 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。 Exchange: message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。 Queue: 消息最终被送到这里等待consumer取走。一个message可以被同时拷贝到多个queue中。 Binding: exchange和queue之间的虚拟连接,binding中可以包含routing key。Binding信息被保存到exchange中的查询表中,用于message的分发依据。 3. 典型的“生产/消费”消息模型 生产者发送消息到broker server(RabbitMQ)。在Broker内部,用户创建Exchange/Queue,通过Binding规则将两者联系在一起。Exchange分发消息,根据类型/binding的不同分发策略有区别。消息最后来到Queue中,等待消费者取走。 4. Exchange类型 Exchange有多种类型,最常用的是Direct/Fanout/Topic三种类型。 Direct Message中的“routing key”如果和Binding中的“binding key”一致, Direct exchange则将message发到对应的queue中。 Fanout 每个发到Fanout类型Exchange的message都会分到所有绑定的queue上去。 Topic 根据routing key,及通配规则,Topic exchange将分发到目标queue中。 Routing key中可以包含两种通配符,类似于正则表达式:

这里也推荐给想要了解RabbitMQ的同学一个网站,http://tryrabbitmq.com ,它提供在线RabbitMQ 模拟器,可以帮助理解Exchange/queue/binding概念。 至此,我们对于消息队列的发展,RabbitMQ的产生,以及AMQP协议中的重要概念做了一个完整的介绍。   from:https://www.cnblogs.com/frankyou/p/5283539.html

龙生   01 Sep 2018
View Details

Spring Boot(二):Web 综合开发

上篇文章介绍了 Spring Boot 初级教程:Spring Boot(一):入门篇,方便大家快速入门、了解实践 Spring Boot 特性;本篇文章接着上篇内容继续为大家介绍 Spring Boot 的其它特性(有些未必是 Spring Boot 体系桟的功能,但是是 Spring 特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。 Web 开发 Spring Boot Web 开发非常的简单,其中包括常用的 json 输出、filters、property、log 等 json 接口开发 在以前使用 Spring 开发项目,需要提供 json 接口时需要做哪些配置呢 添加 jackjson 等相关 jar 包 配置 Spring Controller 扫描 对接的方法添加 @ResponseBody 就这样我们会经常由于配置错误,导致406错误等等,Spring Boot 如何做呢,只需要类添加 @RestController 即可,默认类中的方法都会以 json 的格式返回

  如果需要使用页面开发只要使用@Controller注解即可,下面会结合模板来说明 自定义 Filter 我们常常在项目中会使用 filters 用于记录调用日志、排除有 XSS 威胁的字符、执行权限验证等等。Spring Boot 自动添加了 OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,并且我们可以自定义 Filter。 两个步骤: 实现 Filter 接口,实现 Filter 方法 添加@Configuration 注解,将自定义Filter加入过滤链 好吧,直接上代码

  自定义 Property 在 Web 开发的过程中,我经常需要自定义一些配置文件,如何使用呢 配置在 application.properties 中

  自定义配置类

  log配置 […]

龙生   30 Aug 2018
View Details

SpringBoot学习资料汇总

推荐博客 纯洁的微笑 程序猿DD liaokailin的专栏 Spring Boot 揭秘与实战 系列 catoop的专栏 简书Spring Boot专题 方志朋Spring Boot 专栏 Spring-boot集成 推荐网站 Spring boot 官网 Spring Boot参考指南-中文版 Gradle 中文参考指南 慕课网视频 spring-boot-tutorials 开源书籍-微服务:从设计到部署 开源代码 spring boot官方例子 spring-boot-examples SpringBoot-Learning favorites-web springboot-learning-example spring-boot-all   from:http://www.ityouknow.com/springboot/2015/12/30/springboot-collect.html

龙生   29 Aug 2018
View Details

SpringBoot 项目,自动编译,热部署,立刻看到效果

1:在pom.xml 中 配置

注意:并不是pom.xml 的<build>标签中 2: 如果有页面的话 禁止页面缓存

  3:开idea工具的自动编译功能 完成以上步骤 即可实现SpringBoot项目自动编译+热部署,这我们修改后的代码能够立刻看到效果,提高效率! from:https://blog.csdn.net/woshiyeguiren/article/details/79312245   转者PS:其他构建工具可以去http://mvnrepository.com/搜索~

龙生   29 Aug 2018
View Details

Spring Boot(一):入门篇

什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。 使用 Spring Boot 有什么好处 其实就是简单、快速、方便!平时如果我们需要搭建一个 Spring Web 项目的时候需要怎么做呢? 1)配置 web.xml,加载 Spring 和 Spring mvc 2)配置数据库连接、配置 Spring 事务 3)配置加载配置文件的读取,开启注解 4)配置日志文件 … 配置完成之后部署 Tomcat 调试 … 现在非常流行微服务,如果我这个项目仅仅只是需要发送一个邮件,如果我的项目仅仅是生产一个积分;我都需要这样折腾一遍! 但是如果使用 Spring Boot 呢? 很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套 Web 项目或者是构建一个微服务! 使用 Spring Boot 到底有多爽,用下面这幅图来表达 快速入门 说了那么多,手痒痒的很,马上来一发试试! Maven 构建项目 1、访问 http://start.spring.io/ 2、选择构建工具 Maven Project、Java、Spring Boot 版本 2.1.3 以及一些工程基本信息,可参考下图所示: 3、点击 Generate Project 下载项目压缩包 4、解压后,使用 Idea 导入项目,File -> New -> Model from Existing Source.. -> 选择解压后的文件夹 -> OK,选择 Maven 一路 […]

龙生   28 Aug 2018
View Details

weex

2016年4月21日,阿里巴巴在Qcon大会上宣布开源跨平台移动开发工具Weex,Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。 对于移动开发者来说,Weex主要解决了频繁发版和多端研发两大痛点,同时解决了前端语言性能差和显示效果受限的问题。开发者可通过Weex官网申请内测。(http://alibaba.github.io/weex/) 开发者只需要在自己的APP中嵌入Weex的SDK,就可以通过撰写HTML/CSS/JavaScript来开发Native级别的Weex界面。Weex界面的生成码其实就是一段很小的JS,可以像发布网页一样轻松部署在服务端,然后在APP中请求执行。 与 现有的开源跨平台移动开放项目如Facebook的React Native和微软的Cordova(开源中国小编的失误,还是勾股的?)相比,Weex更加轻量,体积小巧。因为基于web conponent标准,使得开发更加简洁标准,方便上手。Native组件和API都可以横向扩展,方便根据业务灵活定制。Weex渲染层具备优异的性 能表现,能够跨平台实现一致的布局效果和实现。对于前端开发来说,Weex能够实现组件化开发、自动化数据绑定,并拥抱Web标准。 突出特点: 致力于移动端,充分调度 native 的能力 充分解决或回避性能瓶颈 灵活扩展,多端统一,优雅“降级”到 HTML5 保持较低的开发成本和学习成本 快速迭代,轻量实时发布 融入现有的 native 技术体系 工程化管理和监控等 轻量:体积小巧,语法简单,方便接入和上手 可扩展:业务方可去中心化横向定制组件和功能模块 高性能:高速加载、高速渲染、体验流畅 from:https://www.oschina.net/p/weex

龙生   28 Aug 2018
View Details
1 177 178 179 410