ASP.NET WebApi項目框架搭建(三):依賴注入之Autofac


一、前言

在編程中,依賴注入是一種實現控制反轉且用於解決依賴性問題的設計模式。一個依賴關系指的是可被利用的一種對象 。依賴注入是將所依賴的傳遞給將要使用的從屬對象。該服務將會變成客戶端狀態的一部分並傳遞服務給客戶端,而不允許客戶端來建立或尋找服務。依賴注入使我們的編程代碼變得松散耦合,易於管理。

Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個:

優點: 

  • 它是C#語言聯系很緊密,也就是說C#里的很多編程方式都可以為Autofac使用,例如可以用Lambda表達式注冊組件
  • 較低的學習曲線,學習它非常的簡單,只要你理解了IoC和DI的概念以及在何時需要使用它們
  • XML配置支持
  • 自動裝配
  • 與Asp.Net MVC 3集成
  • 微軟的Orchad開源程序使用的就是Autofac,從該源碼可以看出它的方便和強大
  • 簡潔高效

二、安裝配置Autofac

1.nuget安裝Autofac和Autofac.WebApi2,注意版本要求

 

 2.新建AutoFac文件夾(F大寫),新建組件注冊類ContainerBuilerCommon來注冊組件

/// <summary>
    /// Autofac注冊類
    /// </summary>
    public static class ContainerBuilerCommon
    {
        /// <summary>
        /// 注冊方法
        /// </summary>
        /// <returns></returns>
        public static IContainer GetWebApiContainer()
        {
            var builder = new ContainerBuilder();
            // 注冊webapi的所有控制器
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            // 注冊一個用於測試的組件Pserson。
            builder.RegisterType<Person>();
            return builder.Build();
        }
    }

3.Global.asax文件加入以下代碼配置autofac依賴注入

public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            // 獲取webapi的配置
            var config = GlobalConfiguration.Configuration;
            // 獲取webapi的依賴注入容器
            var container = ContainerBuilerCommon.GetWebApiContainer();
            // 配置webapi的依賴注入
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }

三、使用autofac實現依賴注入

1.之前我們在autofac注冊類里面注冊了Person類,下面我們在person類里面寫一個Say方法

public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }

        public string Say()
        {
            return "I'm Person Class";
        }
    }

2.在Index控制器中添加Person類的變量,並在構造函數中賦值:

        protected Person _person;

        public IndexController(Person person)
        {
            _person = person;
        }

3.新建一個get請求用來測試依賴注入,如果不適用依賴注入,我們想調用Person的say方法一般是Person p=new Person();p.Say(),有了依賴注入,我們只需要下面這樣。

        /// <summary>
        /// 測試Autofac
        /// </summary>
        /// <returns></returns>
        [Route("autofac")]
        [HttpGet]
        public IHttpActionResult Autofac()
        {
            return Ok(_person.Say());

        }

4.運行項目,測試接口,輸出"I'm Person Class"。可以看到,我們並沒有New一個Person類,就實現了調用Person的Say方法,其實是容器幫我們new了。

四、總結

上面的例子已經簡單的實現了autofac的依賴注入,autofac的用法可總結為三步:

1、創建container builder:

var builder = new ContainerBuilder();

2、注冊組件:

autofac怎么注冊組件可以參考官網:https://autofaccn.readthedocs.io/zh/latest/

3、生成依賴注入容器(如果是webapi則將容器傳給webapi的DependencyResolver對象:  

config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM