IOC(控制反转和依赖注入)之Autofac
Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的。于是,今天抽空研究了下它。下载地址:http://code.google.com/p/autofac/downloads/list
1、解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,这也是本篇文章重点使用的Autofac的类库。
2、引用->添加引用
3、定义接口,类
public interface ILog
{
void SaveLog(string message);
} public class TxtLog : ILog
{
public void SaveLog(string message)
{
throw new NotImplementedException();
}
} public class DbLog : ILog
{
public void SaveLog(string message)
{
throw new NotImplementedException();
}
}
4、在 Global.asax 的 Application_Start() 上注册服务
using Autofac;
using Autofac.Integration.Mvc;
using System.Reflection;
protected void Application_Start()
{
//......... //第一步:创建ContainerBuilder对象。
ContainerBuilder builder = new ContainerBuilder(); //第二步:注册服务(注册Controller类,注册程序集,注册类型)
builder.RegisterControllers(Assembly.GetExecutingAssembly());//注册了当前程序集内所有的Controller类
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())//注册了当前程序集内的所有类
.AsImplementedInterfaces(); builder.RegisterType<DbLog>().As<ILog>();
//可看出ILog的类型已变成了DbLog。但为何要强调末端处?实际上,DBLog已经通过builder.RegisterAssemblyTypes被注册过一次,如果对同一个类型或接口注册多次(比如这里的ILog),在Autofac中会以列表的形式保存,如果只取一个,则Autofac会从列表返回最新的那个。 //第三步:创建容器
var container = builder.Build(); //第四步:用AutofacDependencyResolver替换MVC默认的DependencyResolver
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
5、Controller 方法
public class HomeController : Controller
{
private ILog _log;
private IEnumerable<ILog> _logList; public HomeController(ILog log,IEnumerable<ILog> logList)
{
_log = log;
_logList = logList;
}
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.LogTypeName = _log.GetType().Name;
ViewBag.LogTypeNames = _logList.Select(x => x.GetType().Name).Aggregate((x, y) => x + "," + y);
return View();
} }
6、View
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>Index</title>
</head>
<body>
<div>
Autofac会从列表返回最新的那个: @ViewBag.LogTypeName
</div>
<div>
同一个类型或接口注册多次(比如这里的ILog),在Autofac中会以列表的形式保存(第一个,是最后也个注册的对象):@ViewBag.LogTypeNames
</div>
</body>
</html>
7、效果:
IOC(控制反转和依赖注入)之Autofac的更多相关文章
- Spring专题2: DI,IOC 控制反转和依赖注入
合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https:/ ...
- Java Web实现IOC控制反转之依赖注入
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...
- (转)Ioc控制反转和依赖注入
转载地址:https://zhuanlan.zhihu.com/p/95869440 控制反转控制反转(Inversion of Control,简称IoC),是面向对象编程中的一种设计思想,其作用是 ...
- laravel服务容器(IOC控制反转,DI依赖注入),服务提供者,门脸模式
laravel的核心思想: 服务容器: 容器:就是装东西的,laravel就是一个个的对象 放入:叫绑定 拿出:解析 使用容器的目的:这里面讲到的是IOC控制反转,主要是靠第三方来处理具体依赖关系的解 ...
- Spring的IOC控制反转和依赖注入-重点-spring核心之一
IoC:Inverse of Control(控制反转): 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,好比于MVC.就是将原本在程序中手动创建对象的控制权,交由S ...
- spring IOC --- 控制反转(依赖注入)----简单的实例
IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的 ...
- Spring 04: IOC控制反转 + DI依赖注入
Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...
- 搞定.NET MVC IOC控制反转,依赖注入
一直听说IOC,但是一直没接触过,只看例子好像很高达上的样子,今天抽了点时间实现了下,当然也是借助博客园里面很多前辈的文章来搞的!现在做个笔记,防止自己以后忘记! 1.首先创建MVC项目 2.然后新建 ...
- Java之控制反转和依赖注入
1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...
- java控制反转与依赖注入
1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...
随机推荐
- Binary Tree Paths
Description: Given a binary tree, return all root-to-leaf paths. For example, given the following bi ...
- 如何让Service自动重启而不被kill掉
重写service的onStartCommand方法. @Override public int onStartCommand(Intent intent, int flags, int sta ...
- python unicode字符串
程序开发中,不同语言文字的显示,不同字符集之间的转换非常麻烦,在python的unicode的使用中,对这点感触颇深.所以,以下总结了python中对unicode字符处理的一些理解. 程序存储.传输 ...
- python操作mongodb之四cp数据库
from pymongo import MongoClient #连接数据库 client=MongoClient('192.168.30.252',27017) #获取现有数据库的名称 client ...
- 项目二:使用机器学习(SVM)进行基因预测
SVM软件包 LIBSVM -- A Library for Support Vector Machines(本项目所用到的SVM包)(目前最新版:libsvm-3.21,2016年7月8日) C-S ...
- Hive中JOIN操作
1. 只支持相等JOIN. 2. 多表连接当使用不同的列进行JOIN时,会产生多个MR作业. 3. 最后的表的数据是从流中读取,而前面的会在内存中缓存,因此最好把最大的表放在最后. SELECT /* ...
- JBPM工作流入门总结
关于JBPM工作流 1.工作流 工作流是一项分离业务操作和系统流程的技术.工作流由实体(Entity).参与者(Participant).流程定义(Flow Definition).工作流引擎(Eng ...
- Web网页性能管理详解
你遇到过性能很差的网页吗? 这种网页响应非常缓慢,占用大量的 CPU 和内存,浏览起来常常有卡顿,页面的动画效果也不流畅. 你会有什么反应?我猜想,大多数用户会关闭这个页面,改为访问其他网站.作为一个 ...
- Java_Ant 详解
1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台 --因为 ...
- nodeschool.io 6
~~ MAKE IT MODULAR ~~ This problem is the same as the previous but introduces the concept ofmodules. ...