Autofac IoC容器基本使用步骤【1】
原文:http://www.bkjia.com/Asp_Netjc/888119.html 【原文中有一个地方报错,下面已修改】
一.基本步骤:
1.设计适合控制反转(IoC)的应用程序
2.给应用程序Autofac 引用.
3.注册组件.
4.创建一个Container以备后用.
5.从Container创建一个 lifetime scope .
6.使用这个Lifetime Scope 来解析组件的实例.
二.详细介绍:
1.什么是控制反转?
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。IoC就是IoC,不是什么技术,与GoF一样,是一种 设计模式。
Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了;而采用了IoC之后,我们的就把创建接口的一个实例交给IoC容器.从而实现了解耦.
所以我们在编程的时候的原则之一就是"针对接口编程",这里的"接口"不是指一要是个接口类型,它可以是C#语言中的接口类型,也可以一个具体的父类.
public interface ILcService
{
string ServiceName { get; }
} public class LcService:ILcService
{ public string ServiceName
{
get;
set;
}
}
2.怎么添加Autofac的引用?
1)我们可以到Autofac官网下载dll文件,然后在Visualstudio的项目中添加引用
2)也可以使用NuGet 安装autofac包.
3.怎样注册组件?
在Autofac中,我们使用一个ContainerBuilder类的实例来注册我们的我们的组件. Autofac提供了Register方法家族,方便我们注册组件.
ContainerBuilder builder = new ContainerBuilder(); //builder.RegisterType<ILcService>().As<LcService>().InstancePerDependency();
//此处报错: The type 'AutofacIocApp.ILcService' is not assignable to service 'AutofacIoc’
//原文中注册顺序写反了, AnIDynamicQuery
is not aDynamicQuery
but aDynamicQuery
IS anIDynamicQuery
.
builder.RegisterType<LcService>().As<ILcService>().InstancePerDependency();
4.创建一个Container以备后用.
直接调用ContainerBuilder类实例的build()即可.
var container = builder.Build();
5.创建一个Lifetime Sope.
var lifetimescope = container.BeginLifetimeScope();
6.得到我们需要的的实例.
ILcService service = lifetimeScope.Resolve<ILcService>();
我们可以在最后看的出来,使用了IoC之后,就符合设计模式中要求的"针对接口编程,不针对实现编程";创建实例不是使用New关键字创建,而是创建实例的工作交给了IoC容器,这就实现了关系解耦,可以在IoC容器中随便的替换具体的实现类了.
还有个问题就是"为什么不直接从Container中直接解析出具体的实例,而要创建一个LifetimeScope,再从它里面解析?"
这个就是考虑到内存泄露问题. LifetimeScope用完了,就释放了,它里面的实例也跟着释放了,就不会出现内存泄露,Container是个root ,永远不会释放,如果他里面存在实例.就有可能存在内存泄露问题.
Autofac IoC容器基本使用步骤【1】的更多相关文章
- 自己实现IOC容器,java代码实现简易版IOC容器,IOC容器实现的步骤分解
一.需求 实现一个简易的IOC容器,管理Bean,从IOC容器的BeanFactory中获取实例,从而取代自己new实例的做法. 二.实现步骤分析 三.具体代码实现 自定义注解类 MyComponen ...
- Autofac IoC容器基本实战【2】
原文:http://www.cnblogs.com/liping13599168/archive/2011/07/16/2108209.html Autofac是一款IOC框架,比较于其他的IOC框架 ...
- IoC容器Autofac学习笔记
一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...
- SpringBoot启动流程分析(四):IoC容器的初始化过程
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用
Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...
- Ioc容器Autofac系列(1)-- 初窥
一.前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Io ...
- AutoFac使用~IOC容器(DIP,IOC,DI)
#cnblogs_post_body h1 { background-color: #A5A5A5; color: white; padding: 5px } Autofac一款IOC容器,据说比Sp ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- IOC容器 - Autofac概述
Autofac是比较出名的Ioc容器之一,熟悉Orchard的应该熟知.本文直接介绍autofac用法 一.开始 1.NuGet添加或者直接http://code.google.com/p/autof ...
随机推荐
- Vertica7 Native Connection Load Balance
原文链接:Vertica7 Native Connection Load Balance 在Vertica7曾经的版本号中,Vertica是通过Linux的Virtual IP来实现连接的负载均衡的, ...
- centos 6.5安装docker报错(查看报错详细信息--推荐)
(1)yum安装docker [root@namenode ~]# yum install docker-io (2)启动docker [root@namenode ~]# /etc/init.d/d ...
- mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格
mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格 MemberID MemberName FruitName -------------- ------------- ...
- Python 常见错误及解决办法
错误: Traceback (most recent call last): File "I:/Papers/consumer/codeandpaper/RegressionandGBDTa ...
- [HNOI2002]营业额统计 Splay tree
Splay tree入门题,学好代码风格,学习HH大牛的,传送门.. #include <functional> #include <algorithm> #include & ...
- openWRT学习之LUCI之中的一个helloworld演示样例
备注1:本文 讲述的是原生的openWRT环境下的LUCI 备注2:本文參考了诸多资料.感谢网友分享.參考资料: http://www.cnblogs.com/zmkeil/archive/2013/ ...
- Windows 2003 IIS 不支持ASP问题的解决方法
有时候我们在配置iis的时候,为了安全关闭了asp的支持,下面我们来介绍下让iis支持asp的一些注意事项特别注意:当我们在没有配置好iis的时候,不要安装补丁了,组件之类的东西,先把网站弄开通了,再 ...
- 源码分析HotSpot GC过程(二):DefNewGeneration的GC过程
由于虚拟机的分代实现,虚拟机不会考虑各个内存代如何实现垃圾回收,具体的工作(对象内存的分配也是一样)由各内存代根据垃圾回收策略自行实现. DefNewGeneration的使用复制算法进行回收.复制算 ...
- UIWebView和UICollectionViewController的使用
UIWebView和UICollectionViewController的使用 UIWebView UIWebView是iOS内置的浏览器的控件, 可以浏览网页, 打开文档等 .系统自带的Safari ...
- C++常函数
常函数即在类的成员函数参数列表后放置const的函数,常函数的作用是限制函数体对成员变量的修改,此外,常函数也不能调用非 常函数. #include <iostream> using na ...