.net webapi 中使用autofac
简单记录下,是因为前几天有人问起来,我又温习了下,所以在这mark下。
环境是 .net4.5 webapi 很简单的一个接口项目,额外就一个service层
1、NuGet安装
安装好以后,写一个注册类
2、注册类
1 /// <summary> 2 /// Autoface 3 /// PrintY 4 /// 2020-12-16 5 /// </summary> 6 public class AutofacConfig 7 { 8 /// <summary> 9 /// IOC注册 10 /// </summary> 11 public static void Register() 12 { 13 // 实例化一个autofac的创建容器 14 var builder = new ContainerBuilder(); 15 16 // 注册api容器需要使用HTTPConfiguration对象 17 HttpConfiguration config = GlobalConfiguration.Configuration; 18 19 SetupResolveRules(builder); 20 21 //注册所有的ApiControllers 22 builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); 23 24 // 创建一个autofac的容器 25 var container = builder.Build(); 26 27 // api的控制器对象由autofac来创建 28 config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 29 } 30 31 32 /// <summary> 33 /// 设置配置规则 34 /// </summary> 35 /// <param name="builder"></param> 36 public static void SetupResolveRules(ContainerBuilder builder) 37 { 38 // 告诉autofac框架,将来要创建的控制器类存放在哪个程序集,(本实例[CommonManagement.Web]) 39 Assembly controllerAssmbly = Assembly.Load("LTT.API"); 40 41 builder.RegisterApiControllers(controllerAssmbly); 42 43 //如果需要直接调用仓储层 44 //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例 45 //Assembly RepositoryAssembly = Assembly.Load("LTT.Service"); 46 47 //创建仓储层中的所有类的instance以此类的实现接口存储 48 //builder.RegisterTypes(RepositoryAssembly.GetTypes()).Where(a => a.Name != null).AsImplementedInterfaces(); 49 50 builder.RegisterAssemblyTypes(Assembly.Load("LTT.Service")).PropertiesAutowired(); 51 } 52 }
说下哈,这个注册类也不是我写的,我只是改了点东西,忘记从哪摘抄的了,和原作者说下sorry
3、使用
1 public FastEnquiryService fastEnquiryService { set; get;}
就很简单了,直接用就行,我这个项目没有写接口,也没有仓储,然后是属性注入(只注入的service层),比较简单,其余的就不多介绍了。