Autofac使用
AutoFac是.Net平台下的IOC容器产品,传说是速度最快的一个。
优点:
- 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件
- 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们
- XML配置支持
- 自动装配
- 与ASP.Net MVC集成
- 微软的Orchad开源程序使用的就是Autofac,从该源码可以看出它的方便和强大
怎么使用Autofac
通过VS中的NuGet来加载AutoFac,引入成功后引用就会出现Autofac。(最后添加了AutoFac.dll即为成功)
先定义一个数据访问的接口和访问类。
/// <summary>
/// 数据源操作接口
/// </summary>
public interface IDataSource
{
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
string GetData();
}
/// <summary>
/// SQLSERVER数据库
/// </summary>
public class Sqlserver : IDataSource
{
public string GetData()
{
return "通过SQLSERVER获取数据";
}
}
/// <summary>
/// ORACLE数据库
/// </summary>
public class Oracle : IDataSource
{
public string GetData()
{
return "通过Oracle获取数据";
}
}
如果最普通的方式调用SQLSERVER怎么写?
static void Main(string[] args)
{
IDataSource ds = new Sqlserver();
Console.WriteLine(ds.GetData());
Console.ReadLine();
}
调用Oracle的话new Oracle()就可以了。
改进一下代码。我们在加入一个DataSourceManager类来看一下
public class DataSourceManager
{
IDataSource _ds;
/// <summary>
/// 根据传入的类型动态创建对象
/// </summary>
/// <param name="ds"></param>
public DataSourceManager(IDataSource ds)
{
_ds = ds;
}
public string GetData()
{
return _ds.GetData();
}
}
这样写的好处是什么,这样加入加入新的数据源,只用调用的时候传入这个对象就可以,就会自动创建一个对应的对象。那接下如果要调用SQLSERVER怎么写。看代码
DataSourceManager dsm = new DataSourceManager(new Sqlserver());
Console.WriteLine(dsm.GetData());
Console.ReadLine();
上面的DataSourceManager的动态创建的方式就是因为又有个带IDataSource的参数的构造函数,只要调用者传入实现该接口的对象,就实现了对象创建。
那我们看看怎么使用AutoFac注入实现构造函数注入
builder.RegisterType<DataSourceManager>();
builder.RegisterType<Sqlserver>().As<IDataSource>();
using (var container = builder.Build())
{
var manager = container.Resolve<DataSourceManager>();
Console.WriteLine(manager.GetData());
Console.ReadLine();
}
上面的就是AutoFac构造函数注入,他给IDataSource注入的是Sqlserver,就是我们调用的数据,返回的就是Sqlserver数据。那下面我们具体的了解一下AutoFac的一些方法
Autofac方法说明
-
builder.RegisterType

浙公网安备 33010602011771号