Autofac使用

AutoFac是.Net平台下的IOC容器产品,传说是速度最快的一个。

优点:

  1. 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件
  2. 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们
  3. XML配置支持
  4. 自动装配
  5. 与ASP.Net MVC集成
  6. 微软的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方法说明
  1. builder.RegisterType

posted @ 2020-01-06 14:36  布丁果冻  阅读(238)  评论(0)    收藏  举报