AutoFac IoC DI 依赖注入
记录点点滴滴知识,为了更好的服务后来者!
一、为什么使用AutoFac?
之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~
Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个:
优点:
它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件
较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们
XML配置支持
自动装配
与Asp.Net MVC 3集成
微软的Orchad开源程序使用的就是Autofac,从该源码可以看出它的方便和强大
既然它都这么牛X了,我们用它就理所当然了,所以推荐其为IOC的终极解决方案!
二、AutoFac的使用
首先你必须获取AutoFac,这里你可以通过各种方式加载它,我这里还是通过VS中的NuGet来加载AutoFac,不论是哪种方式,最终的目的就是将 Autofac.dll,Autofac.Configuration.dll 这两个程序集引用到你的项目中。这样在你的项目中,如果想使用AutoFac,只需添加其命名空间引用即可~
1、AutoFac入门
我们先定义一个数据访问的接口:
public interface IDAL
{
void Insert(string commandText);
}
然后用Sql和Oracle两种方式分别实现上述接口,不过这里只是演示而已,所以并没有真正去实现这两个类,你懂的~
SQL方式:
复制代码
复制代码
public class SqlDAL : IDAL
{
public void Insert(string commandText)
{
Console.WriteLine("使用sqlDAL添加相关信息");
}
}
复制代码
复制代码
Oracle方式:
复制代码
复制代码
public class OracleDAL : IDAL
{
public void Insert(string commandText)
{
Console.WriteLine("使用OracleDAL添加相关信息");
}
}
复制代码
复制代码
然后注入实现构造函数注入:
复制代码
复制代码
public class DBManager
{
IDAL _dal;
public DBManager(IDAL dal)
{
_dal= dal;
}
public void Add(string commandText)
{
_dal.Insert(commandText);
}
}
复制代码
复制代码
最后要真正完成依赖注入就得AtuoFac登场了:
复制代码
复制代码
var builder = new ContainerBuilder();
builder.RegisterType
();
builder.RegisterType().As();
using (var container = builder.Build())
{
var manager = container.Resolve();
manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");
}
复制代码
复制代码
从以上栗子可以看出,其实AutoFac的使用跟Unity的使用有点像,关键的东东就是这个Container容器类
2、AutoFac常用方法说明
(1)builder.RegisterType