文章出處

一、測試倉儲層、業務層是否能實現對數據庫表的操作

1、創建IsysUserInfoRepository接口來繼承IBaseRepository父接口

  1 namespace Wchl.WMBlog.IRepository
  2 {
  3     public partial interface IsysUserInfoRepository : IBaseRepository<sysUserInfo>
  4     {
  5 
  6     }
  7 }
View Code

2、創建sysUserInfoRepository類繼承BaseRepository父類,以及 IsysUserInfoRepository接口

sysUserInfoRepository類:

  1 namespace Wchl.WMBlog.Repository
  2 {
  3     public partial class sysUserInfoRepository : BaseRepository<sysUserInfo>, IsysUserInfoRepository
  4     {
  5 
  6     }
  7 }
View Code

3、創建服務接口IsysUserInfoServices繼承IBaseServices接口

  1 namespace Wchl.WMBlog.IServices
  2 {
  3     public partial interface IsysUserInfoServices: IBaseServices<sysUserInfo>
  4     {
  5     }
  6 }
View Code

4、創建服務類sysUserInfoServices繼承BaseServices,以及IsysUserInfoServices接口

 

  1 namespace Wchl.WMBlog.Services
  2 {
  3      public partial class sysUserInfoServices: BaseServices<sysUserInfo>, IsysUserInfoServices
  4     {
  5 
  6     }
  7 }
  8 
View Code

5、服務層的父類BaseServices中baseDal需要new一個倉儲父類泛型

public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();

6、在UI層中MVC,HOME控制器index下創建一個添加的實例

  1  IsysUserInfoServices userinfoservice = new sysUserInfoServices();
  2 
  3         public ActionResult Index()
  4         {
  5             try
  6             {
  7                 //var usreinfo = userinfoservice.QueryWhere(c => c.uID > 2).FirstOrDefault();
  8                 for (int i = 0; i < 10; i++)
  9                 {
 10                     userinfoservice.Add(new sysUserInfo()
 11                     {
 12                         uLoginName = "admin" + i,
 13                         uLoginPWD = "123456",
 14                         uRealName = "超級管理員" + i,
 15                         uCreateTime = DateTime.Now,
 16                         uUpdateTime = DateTime.Now,
 17                         uRemark = "測試添加功能"
 18                     });
 19                 }
 20 
 21                 userinfoservice.SaverChanges();
 22                 return Content("添加數據成功");
 23             }
 24             catch (Exception ex)
 25             {
 26 
 27                 return Content("錯誤提示:" + ex.Message); ;
 28             }
 29 
 30         }
View Code

7、在WebUI的Web.config中添加數據庫鏈接字符串

image

8、然后啟動系統頁面提示

image

表示數據能夠正常錄入數據庫中,查看數據庫

image

數據庫中數據已經可以正常插入,另外對表中的字段約束也成功了。

二、使用Autofac依賴注入分離接口與實例之間的關系,達到解耦的目的

1、使用NuGet管理工具下載Autofac,安裝在webUI

image

2、由于需要在系統啟動之前來把所有的類創建好相應的對象

需要在Global文件下添加一個配置文件來實現MVC項目的IOC和DI

image

3、然后在App_Start文件中創建AutofacConfig文件

AutofacConfig文件

  1 namespace Wchl.WMBlog.WebUI
  2 {
  3     public class AutofacConfig
  4     {
  5         /// <summary>
  6         /// 負責調用autofac框架實現業務邏輯層和數據倉儲層程序集中的類型對象的創建
  7         /// 負責創建MVC控制器類的對象(調用控制器中的有參構造函數),接管DefaultControllerFactory的工作
  8         /// </summary>
  9         public static void Register()
 10         {
 11             //實例化一個autofac的創建容器
 12             var builder = new ContainerBuilder();
 13             //告訴Autofac框架,將來要創建的控制器類存放在哪個程序集 (Wchl.CRM.WebUI)
 14             Assembly controllerAss = Assembly.Load("Wchl.WMBlog.WebUI");
 15             builder.RegisterControllers(controllerAss);
 16 
 17             //告訴autofac框架注冊數據倉儲層所在程序集中的所有類的對象實例
 18             Assembly respAss = Assembly.Load("Wchl.WMBlog.Repository");
 19             //創建respAss中的所有類的instance以此類的實現接口存儲
 20             builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces();
 21 
 22             //告訴autofac框架注冊業務邏輯層所在程序集中的所有類的對象實例
 23             Assembly serpAss = Assembly.Load("Wchl.WMBlog.Services");
 24             //創建serAss中的所有類的instance以此類的實現接口存儲
 25             builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces();
 26 
 27             // builder.RegisterType<>().As<>();
 28 
 29             //創建一個Autofac的容器
 30             var container = builder.Build();
 31             //將MVC的控制器對象實例 交由autofac來創建
 32             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
 33         }
 34     }
 35 }
View Code

4、修改Repository程序集和Services程序集的生成路基到WebUI層的Bin目錄下,也可以直接引用的方式。

5、修改HomeController控制器下userinfoservice的生成方式,改為創建構造函數的時候來生成。

image

6、修改服務層sysUserInfoServices構造函數,使其創建的時候生成相應的對象

image

把dal復制給dal是為了能拿到sysUserInfoServices中自己特殊的方法。base.baseDal = dal;為拿到父類的公用方法。

BaseServices類中也修改為不需要new一個實例類

image

7、把homeController下改成查詢數據,返回到頁面。

image

image

顯示名字表示Autofac依賴注入成功了

下一篇就是要添加Nlog日志框架以及Cache緩存機制使用使用微軟的MemoryCache以及Redis,希望大家多多吐槽,批評指點,謝謝了。

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()