網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、創(chuàng)建實(shí)體類庫(kù)
創(chuàng)建單獨(dú)實(shí)體類
創(chuàng)建DI.Entity類庫(kù),用來(lái)存放所有的實(shí)體類,新建用戶實(shí)體類,其結(jié)構(gòu)如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DI.Entity { public class UserEntity { public int UserId { get; set; } public string UserName { get; set; } public int Sex { get; set; } public int Age { get; set; } } }
二、創(chuàng)建倉(cāng)儲(chǔ)接口類庫(kù)
新建DI.Interface類庫(kù)文件,存放所有接口,IUserRepository接口定義如下:
using DI.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DI.Interface { public interface IUserRepository { ListGetUsers(); } }
三、創(chuàng)建倉(cāng)儲(chǔ)接口的實(shí)現(xiàn)類庫(kù)
1、SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)
新建DI.SqlServer類庫(kù)文件,SqlServerUserRepository實(shí)現(xiàn)IUserRepository接口,SqlServerUserRepository類定義如下:
using DI.Entity; using DI.Interface; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DI.SqlServer { public class SqlServerUserRepository : IUserRepository { public ListGetUsers() { List list = new List () { new UserEntity(){UserId=1,UserName="王五",Sex=2,Age=21}, new UserEntity(){UserId=2,UserName="趙六",Sex=2,Age=23}, }; return list; } } }
2、Oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)
新建DI.Oracle類庫(kù)文件,OracleUserRepository實(shí)現(xiàn)IUserRepository接口,OracleUserRepository類定義如下:
using DI.Entity; using DI.Interface; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DI.Oracle { public class OracleUserRepository : IUserRepository { public ListGetUsers() { List list = new List () { new UserEntity(){UserId=1,UserName="張三",Sex=1,Age=24}, new UserEntity(){UserId=2,UserName="李四",Sex=1,Age=22}, }; return list; } } }
四、新建WebAPI項(xiàng)目
1、安裝依賴項(xiàng)
通過NuGet安裝所需的依賴項(xiàng):Autofac、Autofac.WebApi2(如果使用的是WebApi1,這里需要安裝WebApi)。
2、創(chuàng)建AutofacWebApiConfig類
AutofacWebApiConfig類定義如下:
using Autofac; using Autofac.Integration.WebApi; using DI.Interface; using DI.SqlServer; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using System.Web.Http; namespace WebApi.AutofacDI { public class AutofacWebApiConfig { public static void RegisterDependencies() { SetAutofacWebapi(); } private static void SetAutofacWebapi() { ContainerBuilder builder = new ContainerBuilder(); HttpConfiguration config = GlobalConfiguration.Configuration; // Register API controllers using assembly scanning. builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces(); // 使用SQLserver數(shù)據(jù)庫(kù)實(shí)現(xiàn) builder.RegisterType().As ().InstancePerRequest(); var container = builder.Build(); // Set the WebApi dependency resolver. config.DependencyResolver = new AutofacWebApiDependencyResolver(container); } } }
3、修改Global.asax文件
修改后的Global.asax文件定義如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using WebApi.AutofacDI; namespace WebApi { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); // 配置依賴注入 AutofacWebApiConfig.RegisterDependencies(); } } }
4、創(chuàng)建Users控制器
創(chuàng)建UsersController類,并在構(gòu)造函數(shù)中注入,UsersController類定義如下:
using DI.Entity; using DI.Interface; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace WebApi.Controllers { public class UsersController : ApiController { private IUserRepository _userRepository; ////// 構(gòu)造函數(shù)中注入 /// /// public UsersController(IUserRepository userRepository) { this._userRepository = userRepository; } public IHttpActionResult Get() { return Json>( _userRepository.GetUsers()); } } }
5、測(cè)試
啟動(dòng)程序,然后在瀏覽器里面輸入:http://localhost:51157/api/users,結(jié)果如下:
從結(jié)果中可以看出:這里使用的是SQLserver實(shí)現(xiàn)的。
修改AutofacWebApiConfig文件,用oracle實(shí)現(xiàn),修改后的代碼如下:
using Autofac; using Autofac.Integration.WebApi; using DI.Interface; using DI.Oracle; using DI.SqlServer; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using System.Web.Http; namespace WebApi.AutofacDI { public class AutofacWebApiConfig { public static void RegisterDependencies() { SetAutofacWebapi(); } private static void SetAutofacWebapi() { ContainerBuilder builder = new ContainerBuilder(); HttpConfiguration config = GlobalConfiguration.Configuration; // Register API controllers using assembly scanning. builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces(); // 使用SQLserver數(shù)據(jù)庫(kù)實(shí)現(xiàn) //builder.RegisterType().As ().InstancePerRequest(); // 使用oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn) builder.RegisterType ().As ().InstancePerRequest(); var container = builder.Build(); // Set the WebApi dependency resolver. config.DependencyResolver = new AutofacWebApiDependencyResolver(container); } } }
運(yùn)行結(jié)果:
從結(jié)果中可以看出:這里使用的是oracle實(shí)現(xiàn)的。
五、將Autofac的實(shí)現(xiàn)放到單獨(dú)的類庫(kù)中
新建DI.Server類庫(kù),將Autofac的注冊(cè)單獨(dú)放在類庫(kù)中,AutofacWebApiConfig類定義如下:
using Autofac; using Autofac.Integration.WebApi; using DI.Interface; using DI.SqlServer; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Web.Http; using System.Web.Mvc; namespace DI.Server { public class AutofacWebApiConfig { public static void RegisterDependencies() { SetAutofacWebapi(); } private static void SetAutofacWebapi() { ContainerBuilder builder = new ContainerBuilder(); HttpConfiguration config = GlobalConfiguration.Configuration; // Register API controllers using assembly scanning. builder.RegisterApiControllers(Assembly.LoadFrom(@"F:\Practice\WebAPI\WebApi依賴注入\DI\WebApiDIDemo\WebApi\bin\WebApi.dll")); builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces(); builder.RegisterType().As ().InstancePerRequest(); var container = builder.Build(); // Set the WebApi dependency resolver. config.DependencyResolver = new AutofacWebApiDependencyResolver(container); } } }
注意:
如果是在單獨(dú)的類庫(kù)項(xiàng)目中,注冊(cè)Api控制器的時(shí)候要加載WebApi項(xiàng)目所有的程序集文件,不要使用builder.RegisterApiControllers(Assembly.GetExecutingAssembly()),這里找到的當(dāng)前程序集是類庫(kù)文件,不是WebApi項(xiàng)目的程序集文件,在控制器里面不會(huì)實(shí)現(xiàn)注入。
2、修改Global.asax文件
修改后的Global.asax文件定義如下:
using DI.Server; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace WebApi { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); // 配置依賴注入(注意:這里使用的是單獨(dú)類庫(kù)里面的AutofacWebApiConfig類) AutofacWebApiConfig.RegisterDependencies(); } } }
運(yùn)行程序,效果和上面的一樣。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/10059294.html
相關(guān)推薦
- 2022-07-21 Error: rsync: [sender] safe_read failed to read 4
- 2022-07-28 聊聊docker跨主機(jī)之間容器通信問題_docker
- 2022-05-19 Python中的logging模塊實(shí)現(xiàn)日志打印_python
- 2022-07-09 使用Jquery操作Cookies_jquery
- 2023-05-20 Android內(nèi)存泄漏導(dǎo)致原因深入探究_Android
- 2023-06-18 C#?Marshal類基本概念和入門實(shí)例講解_C#教程
- 2022-09-18 在while中使用cin>>a?為條件及注意事項(xiàng)說明_C 語(yǔ)言
- 2022-07-08 Python設(shè)置Word全局樣式和文本樣式的示例代碼_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支