Autofac依赖注入框架使用

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

控制反转和依赖注入:程序员

控制反转 IOC(Inverse Of  Control) :  简单通俗的说,就是原本建立对象的实例,由咱们程序员本身建立,如今交给IOC容器来建立,因此称为控制反转。github

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

主要应用: 实现各个层之间的解耦。每一个层调用的都是接口,而不是具体的类. 好处就是之后须要对代码作修改的话,只须要将写好的代码编译成dll 替换原来程序中的dll,无需从新编译。 原本建立接口对象的过程由咱们本身建立,利用抽象工厂模式,配合反射也能够达到解耦. 如今建立接口对象的过程由IOC容器建立.达到解耦性能

使用Demo: 这个Demo主要演示的就是在UI层经过Autofac来帮咱们建立IBLL的实例ui

控制器:spa

著做权归做者全部。
商业转载请联系做者得到受权,非商业转载请注明出处。
做者:卷猫
连接:http://anneke.cn/ArticleInfo/Detial?id=4
来源:Anneke.cn

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

IBLL:code

著做权归做者全部。
商业转载请联系做者得到受权,非商业转载请注明出处。
做者:卷猫
连接: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容器:blog

著做权归做者全部。
商业转载请联系做者得到受权,非商业转载请注明出处。
做者:卷猫
连接: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

相关文章
相关标签/搜索