asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用


摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说。

上篇讲到DbSession,现在接着往下讲。

首先,还是把一些类似的操作完善一下,与Dal层相同,我们同样可以把Bll层中某些使用广泛的类似的操作封装到基类中,另外,同样要给Bll层添加接口层。

下面直接给出相应的代码:

Bll层基类:

BaseService.cs

 1  public abstract  class BaseService<T> where T : class,new()  2  {  3         public IBaseDal<T> CurrentDal { get; set; }  4 
 5         public IDbSession DbSession  6  {  7             get
 8  {  9                 return DbSessionFactory.GetCurrentDbSession(); 10  } 11  } 12 
13         public BaseService() 14  { 15  SetCurrentDal(); 16  } 17 
18         public abstract void SetCurrentDal();//抽象方法:要求子类必须实现。
19 
20         public IQueryable<T> GetEntityByLambda(Expression<Func<T,bool>> wherelambda) 21  { 22             return CurrentDal.GetEntityByLambda(wherelambda); 23  } 24 
25 
26         public T AddEntity(T entity) 27  { 28  CurrentDal.AddEntity(entity); 29  DbSession.SaveChanges(); 30             return entity; 31  } 32 
33         //删除
34 
35         public bool DeleteEntity(T entity) 36  { 37  CurrentDal.DeleteEntity(entity); 38             return DbSession.SaveChanges() > 0; 39 
40  } 41         //
42         public bool UpdateEntity(T entity) 43  { 44  CurrentDal.UpdateEntity(entity); 45             return DbSession.SaveChanges() > 0; 46 
47  } 48     }

 

IBaseService.cs

1  public  interface IBaseService<T> where T : class,new() 2  { 3         IQueryable<T> GetEntityByLambda(Expression<Func<T, bool>> wherelambda); 4  T AddEntity(T entity); 5         bool DeleteEntity(T entity); 6         bool UpdateEntity(T entity); 7     }

 

IUserService.cs

1  public  interface IUserService:IBaseService<Users>
2  { 3 
4  }

 

UserService.cs

 1  public class UserService:BaseService<Users>,IUserService  2  {  3 
 4         //IUserDal userDal = AbstractFactory.GetUserDal();  5         //IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();  6         //public Users AddUser(Users user)  7         //{  8         // dbSession.UserDal.AddEntity(user);  9         // dbSession.SaveChanges(); 10         // return user; 11         //} 12 
13         //public IQueryable<Users> GetUserByLambda(Expression<Func<Users,bool>> wherelambada) 14         //{ 15         // return dbSession.UserDal.GetEntityByLambda(wherelambada); 16         //} 17 
18         //public bool DeleteUser(Users user) 19         //{ 20         // dbSession.UserDal.DeleteEntity(user); 21         // return dbSession.SaveChanges() > 0; 22         //} 23 
24         //public bool UpdateUser(Users user) 25         //{ 26         // dbSession.UserDal.UpdateEntity(user); 27         // return dbSession.SaveChanges() > 0; 28         //} 29 
30         //给父类的属性赋值
31         public override void SetCurrentDal() 32  { 33             CurrentDal = this.DbSession.UserDal; 34  } 35     }

 

以上就是对Bll层的一些封装和接口层的构建,现在在现有的代码基础上,我们来看一下,控制器对Bll层的常规调用:

下面给一段简短代码:

HomeController => AddUser方法

 1  public ActionResult AddUser(FormCollection form)  2  {  3             Users user = new Users();
          //重点看这句,对Bll层的调用
4 IUserService userService = new UserService(); 5 user.UserName = form["name"]; 6 user.PassWord = form["pwd"]; 7 user.PhoneNumber = form["phone"]; 8 user.EMail = form["email"]; 9 userService.AddEntity(user); 10 if (user == null) 11 { 12 return View("Contact"); 13 } 14 else 15 { 16 return View("About"); 17 } 18 }

 

这是一段向数据库中添加user信息的代码,前端代码省略了。

从这段代码里我们可以看到,这里Bll层和UI等的耦合度仍然非常的高,

IUserService userService = new UserService();

 

这一句跟前面讲的Bll层调Dal层一样,耦合度很高,那么如何降低这个耦合度呢,再次使用工厂的方法吗,不不不,那好像太麻烦了。
这里就要用到一个新的知识点了———— spring.net (据说这个很牛逼,但我也不咋清楚,只能边学边写了)。

 接下来说一下spring.net的使用方法和步骤:

1.在web.config中添加Spring.Net块配置和Spring.Net容器配置节点

块配置节点:

1  <!--Spring.Net块配置-->
2     <sectionGroup name="spring">
3       <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
4     </sectionGroup>

容器配置节点

1   <!--Spring.Net 的容器的配置节点-->
2   <spring>
3     <context>
4       <resource uri="file://~/Config/controllers.xml"/>
5     </context>
6   </spring>

2.添加相关引用

首先,在程序目录下的package文件夹新建 Spring.Net文件夹,然后导入如下文件:

导入如下文件:

 

 在Ui项目下添加引用:

3.更改global.aspx.cs文件

将 MvcApplication 由继承 System.Web.HttpApplication 改为 Sring.Web.Mvc.SpringMvcApplication .

 4.在UI项目下新建Config文件夹,在文件夹中新建如下两个配置文件:controller.xml 和 services.xml

controller.xml文件代码如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <objects xmlns="http://www.springframework.net">
 3 
 4   <!--<object></object>引用了几个Service就写几个Service,此处只引用一个Service,所以只写一个-->
 5   <!--type ="类的全名(命名空间名+类名),程序集名称"-->
 6   <object type="IotPf.UI.Controllers.HomeController,IotPf.UI" singleton="false" >
 7     <property name="UserService" ref="UserService" />
 8     
 9   </object>  
10 </objects>

services.xml文件代码如下:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <objects xmlns="http://www.springframework.net">
3 
4   <object name="UserService" type=" IotPf.Bll.UserService,IotPf.Bll" singleton="false" >
5   </object>
6 
7 </objects>

注意:在web.config中记得将services.xml的引用添加进来,并且要注意顺序,先services.xml,后controller.xml

 

5. 然后我们回到HomeController中来:在其中添加属性userService

 

 然后执行程序,发现会报如下错误:

此时,我们添加如下引用:

microsoft.aspnet.webapi

然后,再次执行程序:

运行结果无误:

 

 这就是Spring.Net的使用步骤了。

通过使用Spring.Net,也达到了使UI层和Bll层解耦的目的,而且操作较之工厂的操作简单的多。

 好了,一个简单框架的第二部分,UI层和Bll层的解耦也完成了,关于框架搭建的这篇博客就写到这里啦。

 

我的email:3074596466@qq.com

如有谬误,欢迎指正!

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM