上一篇《一步一步建立ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)》,咱們完成了:git
* 引用SqlSugar * 使用SqlSugar對Repository類的改造
併成功使用PostRepository來查詢到了數據,今天咱們來建立一個新的服務層以及安裝配置依賴注入框架組件Autofac等。github
* 建立服務層:TsBlog.Services * 建立服務接口 * 實現服務接口 * 建立倉儲接口 * 安裝Autofac依賴注入組件 * 註冊配置Autofac 依賴注入
選中解決方案中的解決方案文件夾[1.Libraries],右鍵單擊=>>添加=>>新項目,在彈出的對話框中添加一個.NET Framework 4.6.2的C#類庫項目,命名爲:TsBlog.Services。項目建立成功後,刪除自動生成的Class1.cs文件。web
因爲服務層須要依賴於倉儲層,因此首先切換到倉儲層[TsBlog.Repositories]項目中,建立博文的倉儲接口類:IPostRepository,代碼以下:sql
using System.Collections.Generic; using TsBlog.Domain.Entities; namespace TsBlog.Repositories { public interface IPostRepository { /// <summary> /// 根據ID查詢單條數據 /// </summary> /// <param name="id">ID</param> /// <returns></returns> Post FindById(int id); /// <summary> /// 查詢全部數據(無分頁,大數量時請慎用) /// </summary> /// <returns></returns> IEnumerable<Post> FindAll(); /// <summary> /// 寫入實體數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> int Insert(Post entity); /// <summary> /// 更新實體數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> bool Update(Post entity); /// <summary> /// 根據實體刪除一條數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> bool Delete(Post entity); /// <summary> /// 刪除指定ID的數據 /// </summary> /// <param name="id">主鍵ID</param> /// <returns></returns> bool DeleteById(object id); /// <summary> /// 刪除指定ID集合的數據(批量刪除) /// </summary> /// <param name="ids">主鍵ID集合</param> /// <returns></returns> bool DeleteByIds(object[] ids); } }
再切換到服務層,在剛纔建立的服務層項目中首先引用倉儲層,並分別建立如下服務接口和類文件:數據庫
IPostService.cs:mvc
using System.Collections.Generic; using TsBlog.Domain.Entities; namespace TsBlog.Services { public interface IPostService { /// <summary> /// 根據ID查詢單條數據 /// </summary> /// <param name="id">ID</param> /// <returns></returns> Post FindById(int id); /// <summary> /// 查詢全部數據(無分頁,大數量時請慎用) /// </summary> /// <returns></returns> IEnumerable<Post> FindAll(); /// <summary> /// 寫入實體數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> int Insert(Post entity); /// <summary> /// 更新實體數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> bool Update(Post entity); /// <summary> /// 根據實體刪除一條數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> bool Delete(Post entity); /// <summary> /// 刪除指定ID的數據 /// </summary> /// <param name="id">主鍵ID</param> /// <returns></returns> bool DeleteById(object id); /// <summary> /// 刪除指定ID集合的數據(批量刪除) /// </summary> /// <param name="ids">主鍵ID集合</param> /// <returns></returns> bool DeleteByIds(object[] ids); } }
PostService.csapp
using System.Collections.Generic; using TsBlog.Domain.Entities; using TsBlog.Repositories; namespace TsBlog.Services { public class PostService : IPostService { private readonly IPostRepository _postRepository; public PostService(IPostRepository postRepository) { _postRepository = postRepository; } public bool Delete(Post entity) { return _postRepository.Delete(entity); } public bool DeleteById(object id) { return _postRepository.DeleteById(id); } public bool DeleteByIds(object[] ids) { return _postRepository.DeleteByIds(ids); } public IEnumerable<Post> FindAll() { return _postRepository.FindAll(); } public Post FindById(int id) { return _postRepository.FindById(id); } public int Insert(Post entity) { return _postRepository.Insert(entity); } public bool Update(Post entity) { return _postRepository.Update(entity); } } }
最後,咱們再切換到倉儲層,在PostRepository文件中使用IPostRepository接口並使用SqlSugar實現該接口中的全部數據操做的方法,
PostRepository.cs框架
using System.Collections.Generic; using TsBlog.Domain.Entities; namespace TsBlog.Repositories { /// <summary> /// POST表的數據庫操做類 /// </summary> public class PostRepository : IPostRepository { /// <summary> /// 根據ID查詢 /// </summary> /// <param name="id">Post ID</param> /// <returns></returns> public Post FindById(int id) { using (var db = DbFactory.GetSqlSugarClient()) { var entity = db.Queryable<Post>().Single(x => x.Id == id); return entity; } } /// <summary> /// 查詢全部數據(無分頁,大數量時請慎用) /// </summary> /// <returns></returns> public IEnumerable<Post> FindAll() { #region SqlSugar讀取方式 using (var db = DbFactory.GetSqlSugarClient()) { var list = db.Queryable<Post>().ToList(); return list; } #endregion } /// <summary> /// 寫入實體數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> public int Insert(Post entity) { using (var db = DbFactory.GetSqlSugarClient()) { var i = db.Insertable(entity).ExecuteReturnBigIdentity(); //返回的i是long類型,這裏你能夠根據你的業務須要進行處理 return (int)i; } } /// <summary> /// 更新實體數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> public bool Update(Post entity) { using (var db = DbFactory.GetSqlSugarClient()) { //這種方式會以主鍵爲條件 var i = db.Updateable(entity).ExecuteCommand(); return i > 0; } } /// <summary> /// 根據實體刪除一條數據 /// </summary> /// <param name="entity">博文實體類</param> /// <returns></returns> public bool Delete(Post entity) { using (var db = DbFactory.GetSqlSugarClient()) { var i = db.Deleteable(entity).ExecuteCommand(); return i > 0; } } /// <summary> /// 刪除指定ID的數據 /// </summary> /// <param name="id">主鍵ID</param> /// <returns></returns> public bool DeleteById(object id) { using (var db = DbFactory.GetSqlSugarClient()) { var i = db.Deleteable<Post>(id).ExecuteCommand(); return i > 0; } } /// <summary> /// 刪除指定ID集合的數據(批量刪除) /// </summary> /// <param name="ids">主鍵ID集合</param> /// <returns></returns> public bool DeleteByIds(object[] ids) { using (var db = DbFactory.GetSqlSugarClient()) { var i = db.Deleteable<Post>().In(ids).ExecuteCommand(); return i > 0; } } } }
到這裏,咱們的倉儲和服務層準備工做就完成了,接下來安裝依賴注入組件:Autofacide
選擇解決方案夾[2.Persentation]中的Web項目[TsBlog.Frontend],在"引用"("References")上單擊右鍵,調出Nuget程序包管理界面,搜索"autofac",以下:post
Autofac的當前版本爲:v4.6.2
同時,再搜索"Autofac.Mvc5",以下:
Autofac安裝完成以後,咱們須要對依賴的接口對實如今Autofac中進行註冊,本示例的Autofac配置在Global.asax文件中(請確保TsBlog.Frontend項目中引用了:TsBlog.Domain,TsBlog.Repositories,TsBlog.Servcies這本個項目),以下:
Global.asax
using Autofac; using Autofac.Integration.Mvc; using System.Web.Mvc; using System.Web.Routing; using TsBlog.Repositories; using TsBlog.Services; namespace TsBlog.Frontend { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); //BundleConfig.RegisterBundles(BundleTable.Bundles); AutofacRegister(); } private void AutofacRegister() { var builder = new ContainerBuilder(); //註冊MvcApplication程序集中全部的控制器 builder.RegisterControllers(typeof(MvcApplication).Assembly); //註冊倉儲層服務 builder.RegisterType<PostRepository>().As<IPostRepository>(); //註冊服務層服務 builder.RegisterType<PostService>().As<IPostService>(); //註冊過濾器 builder.RegisterFilterProvider(); var container = builder.Build(); //設置依賴注入解析器 DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } } }
而後,咱們修改控制器文件夾中的HomeController,修改後的代碼以下:
HomeController.cs
using System.Web.Mvc; using TsBlog.Services; namespace TsBlog.Frontend.Controllers { public class HomeController : Controller { private readonly IPostService _postService; public HomeController(IPostService postService) { _postService = postService; } public ActionResult Index() { return View(); } public ActionResult Post() { //var postRepository = new PostRepository(); //var post = postRepository.FindById(1); //return View(post); var post = _postService.FindById(1); return View(post); } } }
再次按F5運行,打開頁面:http://localhost:54739/home/post,此次咱們能夠看到和前兩篇同樣的運行效果了:
本文的源碼託管地址:https://github.com/lampo1024/...
本文學習到此結束,本系列未完待續......
若是你喜歡Rector的本系列文章,請爲我點個大大的贊,以支持Rector在後續的寫做中更有基(激)情,哈哈。。。
本文同步發表至 碼友網 《一步一步建立ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)》