從零開始,搭建博客系統MVC5+EF6搭建框架(2),測試添加數據、集成Autofac依賴注入,mvc5autofac
一、測試倉儲層、業務層是否能實現對數據庫表的操作
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中添加數據庫鏈接字符串
8、然後啟動系統頁面提示
表示數據能夠正常錄入數據庫中,查看數據庫
數據庫中數據已經可以正常插入,另外對表中的字段約束也成功了。
二、使用Autofac依賴注入分離接口與實例之間的關系,達到解耦的目的
1、使用NuGet管理工具下載Autofac,安裝在webUI
2、由於需要在系統啟動之前來把所有的類創建好相應的對象
需要在Global文件下添加一個配置文件來實現MVC項目的IOC和DI
然後在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的生成方式,改為創建構造函數的時候來生成。
6、修改服務層sysUserInfoServices構造函數,使其創建的時候生成相應的對象
把dal復制給dal是為了能拿到sysUserInfoServices中自己特殊的方法。base.baseDal = dal;為拿到父類的公用方法。
BaseServices類中也修改為不需要new一個實例類
7、把homeController下改成查詢數據,返回到頁面。
顯示名字表示Autofac依賴注入成功了
下一篇就是要添加Nlog日志框架以及Cache緩存機制使用使用微軟的MemoryCache以及Redis,希望大家多多吐槽,批評指點,謝謝了。