關(guān)于asp.net core中的Dependency Injection的介紹參見(jiàn)https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection
成都創(chuàng)新互聯(lián)公司主營(yíng)含山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開(kāi)發(fā),含山h5成都微信小程序搭建,含山網(wǎng)站營(yíng)銷(xiāo)推廣歡迎含山等地區(qū)企業(yè)咨詢(xún)
其實(shí)本文思路很簡(jiǎn)單,就是在StartUp.ConfigureServices把ORM(這里用的是EF)注入,然后再把業(yè)務(wù)類(lèi)注入,使用的時(shí)候從Controller中獲取業(yè)務(wù)類(lèi)對(duì)象使用即可。這種場(chǎng)景適合多種數(shù)據(jù)庫(kù),只需在StartUp.ConfigureServices中要怕appsetting.json的配置來(lái)確定注入什么樣的ORM或數(shù)據(jù)連接,和什么樣的實(shí)現(xiàn)業(yè)務(wù)子類(lèi)就可以,還是來(lái)看五代碼實(shí)現(xiàn)吧。
1、首先這義業(yè)務(wù)模塊的操作接口和類(lèi):
////// 用戶(hù)操作接口 /// public interface IUserRepository { ////// 添加用戶(hù) /// /// 用戶(hù)名 /// 用戶(hù)密碼 void AddUser(string userName, string password); ////// 查詢(xún)?nèi)坑脩?hù) /// /// ///List GetAllUsers(); } /// /// SQL Server Entity Framework實(shí)現(xiàn)的用戶(hù)管理類(lèi)型 /// public class UserRepository : IUserRepository { ////// 數(shù)據(jù)庫(kù)實(shí)體 /// readonly PermissionContext _db; ////// 用戶(hù)管理構(gòu)造 /// /// StartUp.ConfigureServices依賴(lài)注入的數(shù)據(jù)庫(kù)Context public UserRepository(PermissionContext db) { _db = db; } ////// 添加用戶(hù) /// /// 用戶(hù)名 /// 用戶(hù)密碼 public void AddUser(string userName,string password) { _db.Users.Add(new BeginDemo.User() { UserName = userName, Password = password }); _db.SaveChanges(); } ////// 查詢(xún)?nèi)坑脩?hù) /// ///public List GetAllUsers() { return _db.Users.ToList(); } }
也可以定義另外的實(shí)現(xiàn)IUserRepository接口的子類(lèi),來(lái)分離不同ORM的實(shí)現(xiàn)。
2、接著在StartUp.ConfigureServices中添加注入(ORM注放和業(yè)務(wù)類(lèi)注入)
//添加EF對(duì)象 services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); //添加用戶(hù)操作對(duì)象,可以在這里切換注入的子類(lèi)(不同的子類(lèi)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)或ORM操作) services.AddSingleton ();
關(guān)于EF在asp.net core的應(yīng)用,請(qǐng)參照:http://axzxs.blog.51cto.com/730810/1894317
3、接下來(lái)就可以很快樂(lè)的在Controller中使用業(yè)務(wù)模塊了:
public class HomeController : Controller { readonly IUserRepository _userRep; public HomeController(IUserRepository userRep) { _userRep = userRep; } public IActionResult Index() { return View(_userRep.GetAllUsers()); } }
當(dāng)ORM發(fā)生變化時(shí),HomeController和View是不變的,因?yàn)檫@里使用的是IUserRepository接口,利用依賴(lài)倒轉(zhuǎn)的原則降低模塊的耦合,提升了程序的擴(kuò)展性。
代碼參考:https://github.com/axzxs2001/Asp.NetCoreExperiment