.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     }
View Code

说下哈,这个注册类也不是我写的,我只是改了点东西,忘记从哪摘抄的了,和原作者说下sorry

3、使用

1  public FastEnquiryService fastEnquiryService { set; get;}

 就很简单了,直接用就行,我这个项目没有写接口,也没有仓储,然后是属性注入(只注入的service层),比较简单,其余的就不多介绍了。 

posted @ 2020-12-16 14:25  PrintY  阅读(281)  评论(0编辑  收藏  举报