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);

 

 

posted @ 2020-04-21 23:26  HuTiger  阅读(2450)  评论(0编辑  收藏  举报