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 数据库依赖缓存的实现
当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过轮询获取数据变化的信息,使用轮询的话也不可能重新查一次后再和以前的数据做比较,如果这样的话如果我一个 ...
随机推荐
- Java ClassLoader 原理分析
一.ClassLoader(类加载器)的作用 如果一个程序包含不止一个class文件,那么当程序启动时,带有main方法的类的class文件作为程序入口先被JVM加载,然后根据程序调用的需要,再逐步进 ...
- Lesser known dplyr tricks
In this blog post I share some lesser-known (at least I believe they are) tricks that use mainly fun ...
- gradle windows 环境变量
我的电脑 -> 高级环境变量 GRADLE_HOME D:\soft\gradle-3.5 path %GRADLE_HOME%\bin
- Django框架全面讲解
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- 对 dotweb 框架进行统一的自定义错误处理
助移动端的增长,如今 RESTful 风格的 API 已经十分流行, 用各种语言去写后端 API 都有很成熟方便的方案,用 golang 写后端 API 更是生产力的代表, 你可以用不输 python ...
- JParticles 2.0 发布,打造炫酷的粒子特效
JParticles 2.0 发布,打造炫酷的粒子特效.不好意思哈,在这么繁花似锦的世界里,标题不得不取得吸引眼球一点哈,不然...还是不啰嗦了,我们进入正题吧 简单介绍一下 JParticles 2 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十)--My ...
- Canvas学习系列一:初识canvas
最近你开始在学习canvas,打算把学习canvas的整个学习过程当中的一些笔记与总结记录下来,如有什么不足之处还请大神们多多指出. 1. 认识canvas Canvas元素的出现,可以说开启的Web ...
- 禁止windows10带来的三大隐患问题
毫无疑问的说.windows10是目前windows发布的最好版本之一,最重要的是其“免费”了.这几天在互联网上,win10有太多的争议了,尤其是你在享受免费的同时,隐私也正在流向微软公司的服务器.. ...
- wdcp php5.3添加pdo_mysql模块
先查看探针: pdo没有支持mysql.导致了PHpwind以及thinkphp框架的一些运用了pdo进行mysql操作的程序无法运行. php5.3默认是封装了pdo_mysq的.那么就没必要单独下 ...