Autofac依赖注入框架使用

简介: Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高

控制反转和依赖注入:

控制反转 IOC(Inverse Of  Control) :  简单通俗的说,就是本来创建对象的实例,由我们程序员自己创建,现在交给IOC容器来创建,所以称为控制反转。

依赖注入DI(Dependence injection) :  容器创建好实例后再注入,称为依赖注入。

主要应用: 实现各个层之间的解耦。每个层调用的都是接口,而不是具体的类. 好处就是以后需要对代码做修改的话,只需要将写好的代码编译成dll 替换原来程序中的dll,无需重新编译。 本来创建接口对象的过程由我们自己创建,利用抽象工厂模式,配合反射也可以达到解耦. 现在创建接口对象的过程由IOC容器创建.达到解耦

使用Demo: 这个Demo主要演示的就是在UI层通过Autofac来帮我们创建IBLL的实例

控制器:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:卷猫
链接:http://anneke.cn/ArticleInfo/Detial?id=4
来源:Anneke.cn

public ActionResult Index()
 {
        ITestBLL testBLL = Container.Resolve<ITestBLL>();
        ViewBag.Name = testBLL.GetName();
        return View();
 }

IBLL:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:卷猫
链接:http://anneke.cn/ArticleInfo/Detial?id=4
来源:Anneke.cn

public interface ITestBLL
{
        string GetName();
}

BLL:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:卷猫
链接:http://anneke.cn/ArticleInfo/Detial?id=4
来源:Anneke.cn

public class TestBLL : ITestBLL
 {
        public string GetName()
        {
            return "卷猫";
        }
 }
 

IOC容器:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:卷猫
链接:http://anneke.cn/ArticleInfo/Detial?id=4
来源:Anneke.cn

/// <summary>
/// Autofac IOC类
/// </summary>
public class Container
{
    /// <summary>
    /// IOC 容器
    /// </summary>
    public static IContainer container = null;
    
    public static T Resolve<T>()
    {
        try
        {
            if (container == null)
            {
                Initialise();
            }
        }
        catch (Exception ex)
        {
            throw new Exception("IOC实例化出错!" + ex.Message);
        }
 
        return container.Resolve<T>();
    }
 
    /// <summary>
    /// 初始化
    /// </summary>
    public static void Initialise()
    {
        var builder = new ContainerBuilder();
 
        //格式:builder.RegisterType<xxxx>().As<Ixxxx>().InstancePerLifetimeScope(); 可以写多个
        builder.RegisterType<TestBLL>().As<ITestBLL>().InstancePerLifetimeScope();
 
        container = builder.Build();
    }
}

完整Demo:https://github.com/zhenzhenkeai/AutoFacDemo

原文地址:https://www.cnblogs.com/zzqvq/p/5814416.html