IOC容器Autofac使用
今天我沉浸在IOC的设计模式追求中,听了很多课,也看了很多例子,这个是我的一个测试项目
为了测试代码,我首先准备了两个类一个Car和接口ICar,这两个类和我们平时项目中的DAL与IDAL相似,现在我们开始!
1.首先添加一个类InitAutofac在我们的程序中
对了,这个是我的程序集
这个有点小问题,因为我ICar和Car放在了SourceClass文件中但是问题不大

2.现在我们引用Autofac

3.下载Autofac

可能有的小伙伴在网上搜了很多的autofac的例子,但是我要告诉你,这个版本号很重要!因为4.0之后有这段代码运行不了
这个是什么呢?我们先不看new关键字之前的东西,细心的小伙伴会看到这个config是不是配置文件啊,没错!这就是通过配置文件注入的方法,记住,从4.0之后autofac不支持这种写法!
推荐用xml,或者json文件的方式去注入!这里只是提一下我们往下看!
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));

这个东西也要下载!
4.查看引用+添加代码

是不是添加了这两个东西,现在工具有了,到了我们代码登场了!
首先是ICar的接口类
public interface ICar {
void Engine(int value);
void Run();
}
里面定义了一个引擎发动的档数和汽车的跑方法,因为这是汽车运行的最基本方法吧
然后到Car中是这么写的
可以看到我们的车库有三款车,其实我最喜欢宝马23333!
当然这三款车都继承了ICar的接口去实现方法
public class AudiCar : ICar
{
private static int Speed;
public void Engine(int value)
{
int Row = value * ;
Speed = Row / ;
} public void Run()
{
Console.WriteLine("奥迪车正以{0}码的速度行驶!",Speed);
}
}
public class BenzCar : ICar
{
private static int Speed;
public void Engine(int value)
{
int Row = value * ;
Speed = Row / ;
} public void Run()
{
Console.WriteLine("奔驰车正以{0}码的速度行驶!", Speed);
}
}
public class FordCar : ICar
{
private static int Speed;
public void Engine(int value)
{
int Row = value * ;
Speed = Row / ;
} public void Run()
{
Console.WriteLine("福特车正以{0}码的速度行驶!", Speed);
}
}
这个时候在看看我们的Program类里面的代码,我注册了一个司机,让他去驾驶车辆
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Driver();
Console.Read();
} } public class Person {
public void Driver(int value) {
ICar car = new AudiCar();
car.Engine(value);
car.Run();
}
}
可以看到,司机挂挡然后可以开着奥迪车了,那我们运行一下看看

奥迪车可以运行了,说明我们的代码没有问题,但是!!!
司机这段代码引用了两个类,一个是接口类,一个是接口的实现类(如果我说的你不明白,请你好好补习接口与类),这并不是我们想要的,
因为如果车坏了,那么此时奥迪车就已经不能开了,那么司机就必须要换车!但是在项目中,这个类相当于已经被编译好了,你已经不能再修改这个类了,此时你就只能看着程序出错了!
所以为了解决这个问题,我们就需要用到依赖倒置原则!为什么要用依赖倒置原则呢?因为我要依赖抽象而不是依赖细节,这样我不管程序出现了什么错误只要我给他一个车他都能开,
那么司机对于车的依赖就会变得松散了,司机就不只是只会开奥迪的司机了,它还可以开其他的车去兜风了!
理解了这段话,说明你已经是可以完全入门的程序员了!
当然这不是我们的主题,现在我们就需要修改代码让这个车变得抽象化
5.IOC框架登场!
首先在我们原先定义的InitAutofac类中添加以下代码
public static class InitAutofac
{
static ContainerBuilder _Builder;//申明容器
public static void InitAutofacs() {
_Builder = new ContainerBuilder();//实例化
_Builder.RegisterType<AudiCar>().As<ICar>();//将需要用到的奥迪车注册到容器中
//_Builder.RegisterType<BenzCar>().As<ICar>();//将需要用到的奔驰车注册到容器中
}
static IContainer _container;//申明一个字段这个字段用来对接容器 static IContainer Container //将对接的内容传输入这个属性!
{
get
{
if (_container == null)
{
_container = _Builder.Build();
}
return _container;
}
}
public static T GetFromFac<T>()//定义一个方法在外部调用,使得可以调用车辆
{
T t = Container.Resolve<T>();//回传已经被注册在容器内的类----AudiCar!
return t;
}
}
通过这个类,在Program类中调用的形式如下
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Driver();
Console.Read();
} }
public class Person
{
public void Driver(int value)
{
InitAutofac.InitAutofacs();
ICar car = InitAutofac.GetFromFac<ICar>();
car.Engine(value);
car.Run();
}
}
运行发现,可以运行!
这个是结果!说明我们使用这个工具已经成功了
但是我在InitAutofac中注释了一段代码!
//_Builder.RegisterType<BenzCar>().As<ICar>();//将需要用到的奔驰车注册到容器中
就是这个,现在我取消注释后运行,
???
发现Audi车改为奔驰车了!那我们的Audi车去哪里了呢?我通过断点测试看

已经进入到断点了,那我们继续执行,发现运行的结果还是奔驰车!说明,奥迪车在注册进入容器的时候被覆盖了!
这个就是一个问题了,下一篇我就继续讲解IOCAutofac容器的各个方法使用!
通过这个例子我深刻了解到了IOC的强大,使得抽象编程变的会更简单!
这篇博客仅供参观,转载和收藏价值不高,只是一个测试,适合刚入门的程序员,大佬勿喷,如果发现概念理解错误,请及时留言,我会更正博客内容或删除博客
实打实原创小例子 现在是早上01点39分,好了我要去睡觉了!
IOC容器Autofac使用的更多相关文章
- 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 ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- .net core2.0下Ioc容器Autofac使用
.net core发布有一段时间了,最近两个月开始使用.net core2.0开发项目,大大小小遇到了一些问题.准备写个系列介绍一下是如何解决这些问题以及对应技术.先从IOC容器Autofac开始该系 ...
- IoC容器Autofac学习笔记
一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...
- [转]Ioc容器Autofac
本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥 前言 第一次接触A ...
- IOC容器 - Autofac概述
Autofac是比较出名的Ioc容器之一,熟悉Orchard的应该熟知.本文直接介绍autofac用法 一.开始 1.NuGet添加或者直接http://code.google.com/p/autof ...
- 用Rider写一个有IOC容器Autofac的.net core的程序
一:Autofac是一个和Java里的Spring IOC容器一样的东西,不过它确实没有Spring里的那么方便,主要是在于它没有提供足够的Api和扫描方式等等,不过优点是它比Spring要快很多,而 ...
- ASP.NET中IOC容器Autofac(依赖注入DI 控制反转IOC)
IOC的一个重点是在程序运行中,动态的向某个对象提供它所需要的其他对象.这一点是通过DI来实现的.Autofac则是比较流行的一款IOC容器. IoC和DI有什么关系呢?其实它们是同一个概念的不同角度 ...
- IoC容器Autofac之IOC/DI基本概念(二)
原文:http://www.cnblogs.com/xdp-gacl/p/4249939.html 1.1.IoC是什么 Ioc—Inversion of Control,即“控制反转”,一种设计思想 ...
随机推荐
- C#面向过程之局部变量、成员变量、变量作用域、可变参数
局部变量与成员变量: 局部变量:定义在方法里面的变量就叫做局部变量:没有默认的初始值,使用变量之前必须给它赋值成员变量:定义在类下面的变量叫做成员变量:如果是数值类型默认初始值为0 如果是引用类型默 ...
- 几个SQL小知识(转)
原文地址:http://www.cnblogs.com/wuguanglei/p/4205976.html 写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码 ...
- ViewModel、ViewData、ViewBag、TempData、Session之间的区别和各自的使用方法
ViewModel ViewModel 是一个用来渲染 ASP.NET MVC 视图的强类型类,可用来传递来自一个或多个视图模型(即类)或数据表的数据.可将其看做一座连接着模型.数据和视图的桥梁 ...
- vue-cli 升级至 webpack 4 指北
时至今日(2018-7-11),vue-cli 任然未稳定支持至webpack4,所以我自己也来创建一个 vue 初始化模板 不过大致的原因我也能猜到,因为很多插件仍然是一个不稳定的点,比如我在创建中 ...
- 构建一个.net的干货类库,以便于快速的开发 - 工具类
相信每一个开发的框架都会有一个工具类,工具类的作用有很多,通常我会将最常用的方法放在工具类里 取得用户IP 取得网站根目录的物理路径 枚举相关 非法关键字检查 绝对路径改为相对路径 获取小数位(四舍五 ...
- Linux学习笔记之Linux命令
1. blkid 查看当前系统中所有已挂载文件系统的类型
- VMWare虚拟机中Ubuntu 16.04 (linux无桌面)配置静态IP上网
1. 基础环境说明 虚拟机: VMWare 12.5.2 操作系统: Ubuntu 16.04 (无桌面) 物理主机操作系统: win 7 旗舰版 2. 摸底 VMware在安装之后,会创建2个虚拟的 ...
- Angular——单页面实例
基本介绍 1.引入的route模块可以对路由的变化做出响应 2.创建的控制器中依然需要$http向后台请求数据 3.php中二维数据的遍历用的是foreach 4.php中$arr=array(),$ ...
- JS实现LOGO像雪花一样落下特效
<HTML><HEAD><TITLE>LOGO从上落下</TITLE> <SCRIPT language=JavaScript> //窗口改 ...
- ORA-01033:ORACLE initialization or shutdown in process
Oracle遇到问题 :在PL/SQL当输入用户名和密码后 竟然出现标题上错误,我一项目数据库数据库全都没有备份,还有很多很多数据,该不会让我重装数据库吧,想到这个我汗那个流啊. 在网上查了下 看了看 ...