webapi项目采用html,在WebApi 中使用AutoFac

本文介绍如何在WebAPI项目中使用Autofac进行依赖注入,包括配置过程及控制器和服务层的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文档

https://www.cnblogs.com/htsboke/p/10956807.html

https://www.cnblogs.com/lenmom/p/8510572.html

在webapi项目中使用autofac,结构如下:

0a8eba2722b1673db60498a9e0f1b2ed.png

首先在api项目当中引用autofac包,如下图所示:

e0fae02ff7f615799a39d9898285fc81.png

仓储类:

1 public interface iusersrepository

2 {

3 int getuserisexists(usersentity criteria);

4

5 }

6

7

8 public class usersrepository : iusersrepository

9 {

10 logger log = logmanager.getlogger("usersrepository");

11

12 ///

13 /// 获取用户是否存在

14 ///

15 ///

16 ///

17 public int getuserisexists(usersentity criteria)

18 {

19 string sql = "。。。。";

20 try

21 {

22 //查询sql代码,此处省略。。。。

}

28 catch (exception ex)

29 {

30 log.fatal(ex, "获取用户是否存在异常:{0},sql:{1}", ex.message, sql);

31 return 0;

32 }

33 }

34 }

服务类:

1 //接口

public interface iusersservice

4 {

5 int getuserisexists(usersentity criteria);

6

7 }

8

10 //实现类

11 public class usersservice : iusersservice

12 {

13 private readonly iusersrepository _usersrepository;

14 public usersservice(iusersrepository usersrepository) //通过构造函数注入

15 {

16 _usersrepository = usersrepository;

17 }

18

19 ///

20 /// 获取用户是否存在

21 ///

22 ///

23 ///

24 public int getuserisexists(usersentity criteria)

25 {

26 return _usersrepository.getuserisexists(criteria);

27 }

28 }

在api接口项目中创建一个autofac工具类:autofacutil.cs

1 public class autofacutil

2 {

3 private static icontainer _container;

4

5 public static void configurecontainer()

6 {

7 #region autofac ioc容器

8

9 var builder = new containerbuilder();

10

11 try

12 {

13 //builder.registercontrollers(assembly.getcallingassembly()); //注册mvc控制器 需要引用package autofac.mvc

14

15 //builder.registerapicontrollers(assembly.getexecutingassembly()).propertiesautowired(); //支持api控制器属性注入

16 builder.registerapicontrollers(assembly.getcallingassembly()); //注册所有api控制器 构造函数注入 需要引用package autofac.webapi

17

18 //注册程序集

19 #region service

20 var assemblysservices = assembly.load("webapi.service");

21 builder.registerassemblytypes(assemblysservices)

22 .asimplementedinterfaces()

23 .instanceperdependency();

24 #endregion

25

26 #region repository

27 var assemblysrepository = assembly.load("webapi.repository");

28 builder.registerassemblytypes(assemblysrepository)

29 .asimplementedinterfaces()

30 .instanceperdependency();

31 #endregion

32

33 _container = builder.build(); //创建依赖注入

34

35

36 //设置mvc依赖注入

37 //dependencyresolver.setresolver(new autofacdependencyresolver(_container));

38

39 //设置webapi依赖注入

40 globalconfiguration.configuration.dependencyresolver = new autofacwebapidependencyresolver(_container);

41 }

42 catch (exception ex)

43 {

44 throw new exception(ex.message + "\n" + ex.innerexception);

45 }

46 #endregion

47 }

48

49 ///

50 /// 从autofac容器获取对象

51 ///

52 ///

53 ///

54 public static t getfromfac()

55 {

56 return _container.resolve();

57 }

58

59 }

在 global.asax.cs 全局中注册一下:

1 public class webapiapplication : system.web.httpapplication

2 {

3 protected void application_start()

4 {

5 arearegistration.registerallareas();

6 globalconfiguration.configure(webapiconfig.register);

7 filterconfig.registerglobalfilters(globalfilters.filters);

8 routeconfig.registerroutes(routetable.routes);

9 bundleconfig.registerbundles(bundletable.bundles);

10

11 //autofac 注册

12 autofacutil.configurecontainer();

13

14 }

15 }

最后在接口中使用:

1 public class userscontroller : apicontroller

2 {

3 private readonly iusersservice _usersservice;

4 public userscontroller(iusersservice usersservice) //使用构造函数注入

5 {

6 _usersservice = usersservice;

7 }

8

9

10 ///

11 /// 获取用户是否存在

12 ///

13 ///

14 ///

15 ///

16 [httppost]

17 public ihttpactionresult getuserisexists(string username, string password)

18 {

19 //验证是否存在当前用户

20 var obmodel = new usersentity()

21 {

22 username = username,

23 password = encryption.md5(password)

24 };

25 var getresult = _usersservice.getuserisexists(obmodel);

26

27 return json(new { isexists = getresult > 0 });

28 }

29

30

31 }

测试结果:

82c59d0ef108738f0af7f0cf2e690050.png

最后:如果出现 未将对象引用的实例 的错误,检查一下是否引用相应的dll程序集了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值