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

相關文章
相關標籤/搜索