2020年9月19日星期六

Autofac的使用

Autofac的使用

  1. 「Autofac简介」
  2. 「基本的使用方式」
  3. 「如何实现webapi控制器自动注入接口」

一、Autofac简介

Autofac是实现依赖注入的类库之一,他可以帮助你实现程序的解耦,所谓 「"上层模块不应依赖于底层模块,应当依赖于抽象,而不应依赖于细节"」,哈哈,咱们说点白话吧,意思就是说 「顶层的模块不应直接依赖于底层模块以及具体的实现,应当有个抽象层在中间,只知道有什么方法就行, 具体怎么实现,细节不管」,这样的好处在于解耦,顶层模块通过接口得到对应实现,不在乎到底是哪个具体对象,只要有这个方法就可以(接口嘛),可以任意更换接口对应实现,而不需要修改代码。

二、基本使用

  • 使用方式如下

首先打开NuGet获取Autofac.Integration.WebApi,获取了之后,引用中会多出如下两个dll库

  1. 「Autofac.dll」(这个非常重要,主要使用它)
  2. 「Autofac.Integration.WebApi.dll」(这个在实现WebApi自动注入时需要)

项目中引入了Autofac的dll库后,我们就可以开始正式使用Autofac了

基础使用
//创建IOC容器构建对象var builder = new ContainerBuilder();//注册接口与具体实现的对应   builder.RegisterType<SqlDatabase>().As<IDataBase>();//创建容器——此时的容器中已有如上注册的映射关系var container = builder.Build();//通过容器注入接口,得到之前注册的具体实现var db = container.Resolve<IDataBase>();
一个接口对应多个实现的使用
//创建IOC容器构建对象var builder = new ContainerBuilder();//注册同一接口对应多个实现,通过Named方法解决,加入关键字   builder.RegisterType<SqlDatabase>().Named<IDataBase>("sql");builder.RegisterType<OracleDatabase>().Named<IDataBase>("oracle");//创建容器——此时的容器中已有如上注册的映射关系var container = builder.Build();//通过容器注入接口+关键字,得到之前注册的具体实现var dbSQL = container.ResolveNamed<IDataBase>("sql");var dbOracle = container.ResolveNamed<IDataBase>("oracle");

WebApi中,使用Autofac自动注入控制器

跟Unity有所不同,Unity只要创建了正确的容器,在Application_Start中配置一下即可,「Unity」设置方式如下所示:

//实例化容器,并注册接口对应的资源类var container = new UnityContainer();container.RegisterType<IProductRepository, ProductRepository>();//设置依赖config.DependencyResolver = new UnityDependencyResolver(container)

到此,发起Webapi请求时,webapi控制器中的接口就会被注入

Autofac的webapi接口自动注入

废话不多说,很简单,如下所示:

//创建容器构建对象var builder = new ContainerBuilder();   //注册接口与实现的对应builder.RegisterType<SqlDatabase>().Named<IDataBase>("sql");builder.RegisterType<OracleDatabase>().Named<IDataBase>("oracle");//这点非常重要:将所有程序集加载进来Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();//然后调用方法,将程序集中的所有webapi控制器注册到构建对象builder.RegisterApiControllers(assemblies).PropertiesAutowired();//创建容器——此时的容器中已有如上的注册映射关系,以及所有程序集中的webapi控制器的注册var container = builder.Build();//设置给依赖关系解析程序GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

此时,WebApi控制器已经可以自动注入接口「Autofac不需要给属性设置Dependency特性,就可自动实现注入」

本文使用 mdnice 排版


原文转载:http://www.shaoqun.com/a/476426.html

c79:https://www.ikjzd.com/w/1016
友家快递:https://www.ikjzd.com/w/1341
最新Shopee 各国市场周报 用于分析市场选品规划:https://www.ikjzd.com/tl/20042
亚马逊利润核算表 Product gross margin :https://www.ikjzd.com/tl/2541
亚马逊站外营销的七问七答:https://www.ikjzd.com/tl/59701

Autofac的使用「Autofac简介」「基本的使用方式」「如何实现webapi控制器自动注入接口」一、Autofac简介❝Autofac是实现依赖注入的类库之一,他可以帮助你实现程序的解耦,所谓「"上层模块不应依赖于底层模块,应当依赖于抽象,而不应依赖于细节"」,哈哈,咱们说点白话吧,意思就是说「顶层的模块不应直接依赖于底层模块以及具体的实现,应当有个抽象层在中间,只知道有什么方法就行,具体怎
r标:https://www.ikjzd.com/w/1070
克雷格:https://www.ikjzd.com/w/194
亚马逊A9算法全面解析,别再说你不懂A9算法啦!:https://www.ikjzd.com/home/90765
打造亚马逊爆款做一回"价格屠夫"又如何?:https://www.ikjzd.com/home/7426
疫情下的仓储费、滞期费怎么办?地中海航运的新服务暖心了:https://www.ikjzd.com/home/119319

没有评论:

发表评论