ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)
IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了这种手法..
一直憋着没写ASP.NET Core的文章..还是怕误导大家..
今天这篇也不是讲Core的
前面写了C#开发移动应用系列 就第一篇和最后一篇上了最多推荐 - - 也许大家确实不看好吧..
算了..废话不多说.开始今天的东西吧..
本篇文章不讲为何我们要用IOC..只讲Autofac使用中的一些小心得
1.基本注入
首先我们要构造一个容器,代码如下:
//第一步: 构造一个AutoFac的builder容器
ContainerBuilder builder = new ContainerBuilder();
第二步..注入自己需要的服务和继承关系. 类似下面:
//注入仓储
builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>)).InstancePerLifetimeScope();
嗯..这里解释一下是什么意思..
RegisterGeneric 注入你的服务类,后面的As则是你服务类继承的接口.
InstancePerLifetimeScope为你注入的这个服务的生命周期.(注:生命周期我们后面讲)
2.控制器注入
采用属性注入的方式,注入控制器
//注入控制控制器
builder.RegisterControllers(assemblys.ToArray()).PropertiesAutowired().InstancePerLifetimeScope();
嗯..这里面的assemblys.ToArray().. 就是一些你要注入到控制器里面的程序集..
嗯 我是直接通过统一接口 然后批量注入..你们自己随意..
PropertiesAutowired()的意思就是采用属性注入的方式
3.特性注入
我们在使用MVC的时候,肯定会用到特性..肯定会有一些自己定义的特性..那么这些特性里面要用到相关的服务,该怎么注入呢..如下:
//注入特性
builder.RegisterFilterProvider();
是的.. 你没看错..MVC里面就一句话就行了..特性里面就可以取到想要的服务了..(注:WebAPI不可以,具体请查官方文档)
4.生成容器并提供给MVC
代码如下:
//通过容器配置生成容器.
var container = builder.Build();
//提供给MVC
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
5.一些杂七杂八
//注入类用这个
builder.RegisterType(要注入的类型)
//注入泛型类用这个
builder.RegisterGeneric(要注入的类型)
6.关于生命周期
InstancePerDependency()
瞬时,嗯..就是服务对于每次请求都会返回单独的实例
InstancePerLifetimeScope()
基于线程或者请求的单例..嗯 就是一个请求 或者一个线程 共用一个
SingleInstance()
嗯..没别的 就是单例.. 整个项目公用一个
InstancePerRequest()
嗯..针对MVC的,或者说是ASP.NET的..每个请求单例
到此就结束了.
嗯..内容不多,胜在实用..分享一下吧, 有问题的地方希望大神指正一下,也顺便是自己的一个记录吧..
ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)的更多相关文章
- ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用
上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...
- ASP.NETCore使用AutoFac依赖注入
原文:ASP.NETCore使用AutoFac依赖注入 实现代码 1.新建接口类:IRepository.cs,规范各个操作类的都有那些方法,方便管理. using System; using Sys ...
- ASP.NET MVC实现依赖注入
在java的spring中有自动注入功能,使得代码变得更加简洁灵活,所以想把这个功能移植到c#中,接下来逐步分析实现过程 1.使用自动注入场景分析 在asp.net mvc中,无论是什么代码逻辑分层, ...
- ASP.NET MVC 数据库依赖缓存
ASP.NET MVC 数据库依赖缓存 问题背景 最近做一个非常简单的功能,就是使用ajax请求的方式从服务端请求一段下拉表的数据. 以前也有做过这个功能,只不过这次做这个功能的时候冒出了一个想法 ...
- BUI Webapp用于项目中的一点小心得
接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...
- ASP.NET MVC IOC依赖注入之Autofac系列(一)- MVC当中应用
话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...
- ASP.NET MVC Autofac自动注入
依赖注入容器有很多插件,我用过Unity和Autofac,这两个插件给我最明显的感觉就是Autofac很快,非常的快,毕竟是第三方开发的,而Unity相对而言性能比较稳定 下面附上Autofac自动注 ...
- 007.ASP.NET MVC控制器依赖注入
原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前 ...
- ASP.NET MVC 数据库依赖缓存的实现
当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过轮询获取数据变化的信息,使用轮询的话也不可能重新查一次后再和以前的数据做比较,如果这样的话如果我一个 ...
随机推荐
- Spring Security教程系列(一)基础篇-2
第 4 章 自定义登陆页面 Spring Security虽然默认提供了一个登陆页面,但是这个页面实在太简陋了,只有在快速演示时才有可能它做系统的登陆页面,实际开发时无论是从美观还是实用性角度考虑,我 ...
- (中级篇 NettyNIO编解码开发)第六章-编解码技术
基于Java提供的对象输入/输出流ObjectlnputStream和ObjectOutputStream,可以直接把Java对象作为可存储的字节数组写入文件,也可以传输到网络上.对程序员来说,基于J ...
- javaWeb学习总结(10)- EL函数库(2)
一.EL函数库介绍 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用. 这些EL函数在JSTL开发包中进行描述,因此在JSP页 ...
- Vue.js中组件传参的方法 - 基于webpack模板
在Vuejs中, 组件之间的传参是今天第一次接触, 之前写的组件互相之间都是独立的, 弗敢专也, 必以分人 环境: node.js npm vue-cli 以上安装请自行百度 一.项目创建 $ vue ...
- Swoole笔记(一)
简介 Swoole是一个PHP扩展,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读 ...
- nodeJS之二进制buffer对象
前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中 ...
- 互联网“剁手”新方向,VR全景购物忙——全景智慧城市常诚
随着VR和AR技术的兴起,各行各业都在寻求VR+的对接方式,除了游戏和社交平台,另一大对VR有着浓厚兴趣的就是电商平台了,阿里.京东等电商巨头纷纷成立VR事业部,如何让亿万用户在VR中愉快的买买买,已 ...
- ASP微信开发获取用户经纬度
wx.config({ //debug: true, debug: true, appId: '<%= appId %>', timestamp: '<%= timestamp %& ...
- selenium+python浏览器窗口的切换
1.首先需要知道当前浏览器中有多少个活动的窗口 >>> br.window_handles[u'{075a54ee-3d10-4c76-b56d-b645259bbd54}', u' ...
- JavaScript数组去重方法及测试结果
最近看到一些人的去面试web前端,都说碰到过问JavaScript数组去重的问题,我也学习了一下做下总结. 实际上最有代表性也就三种方法:数组双重循环,对象哈希,排序后去重. 这三种方法我都做了性能测 ...