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的用法可总结为三步:
var builder = new ContainerBuilder();
autofac怎么注册组件可以参考官网:https://autofaccn.readthedocs.io/zh/latest/
3、生成依赖注入容器(如果是webapi则将容器传给webapi的DependencyResolver对象:
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
本文来自博客园,作者:HuTiger,转载请注明原文链接:https://www.cnblogs.com/huguodong/p/12748845.html,欢迎加入qq群927460240学习讨论