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

时间:2023-03-09 18:20:17
asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用

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

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

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

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

Bll层基类:

BaseService.cs

  public abstract  class BaseService<T> where T : class,new()
{
public IBaseDal<T> CurrentDal { get; set; } public IDbSession DbSession
{
get
{
return DbSessionFactory.GetCurrentDbSession();
}
} public BaseService()
{
SetCurrentDal();
} public abstract void SetCurrentDal();//抽象方法:要求子类必须实现。 public IQueryable<T> GetEntityByLambda(Expression<Func<T,bool>> wherelambda)
{
return CurrentDal.GetEntityByLambda(wherelambda);
} public T AddEntity(T entity)
{
CurrentDal.AddEntity(entity);
DbSession.SaveChanges();
return entity;
} //删除 public bool DeleteEntity(T entity)
{
CurrentDal.DeleteEntity(entity);
return DbSession.SaveChanges() > ; }
// 改
public bool UpdateEntity(T entity)
{
CurrentDal.UpdateEntity(entity);
return DbSession.SaveChanges() > ; }
}

IBaseService.cs

  public  interface IBaseService<T> where T : class,new()
{
IQueryable<T> GetEntityByLambda(Expression<Func<T, bool>> wherelambda);
T AddEntity(T entity);
bool DeleteEntity(T entity);
bool UpdateEntity(T entity);
}

IUserService.cs

  public  interface IUserService:IBaseService<Users>
{ }

UserService.cs

  public class UserService:BaseService<Users>,IUserService
{ //IUserDal userDal = AbstractFactory.GetUserDal();
//IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();
//public Users AddUser(Users user)
//{
// dbSession.UserDal.AddEntity(user);
// dbSession.SaveChanges();
// return user;
//} //public IQueryable<Users> GetUserByLambda(Expression<Func<Users,bool>> wherelambada)
//{
// return dbSession.UserDal.GetEntityByLambda(wherelambada);
//} //public bool DeleteUser(Users user)
//{
// dbSession.UserDal.DeleteEntity(user);
// return dbSession.SaveChanges() > 0;
//} //public bool UpdateUser(Users user)
//{
// dbSession.UserDal.UpdateEntity(user);
// return dbSession.SaveChanges() > 0;
//} //给父类的属性赋值
public override void SetCurrentDal()
{
CurrentDal = this.DbSession.UserDal;
}
}

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

下面给一段简短代码:

HomeController => AddUser方法

  public  ActionResult  AddUser(FormCollection form)
{
Users user = new Users();
          //重点看这句,对Bll层的调用
IUserService userService = new UserService();
user.UserName = form["name"];
user.PassWord = form["pwd"];
user.PhoneNumber = form["phone"];
user.EMail = form["email"];
userService.AddEntity(user);
if (user == null)
{
return View("Contact");
}
else
{
return View("About");
}
}

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

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

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

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

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

块配置节点:

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

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

容器配置节点

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

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

2.添加相关引用

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

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

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

导入如下文件:

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

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

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

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

在Ui项目下添加引用:

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

3.更改global.aspx.cs文件

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

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

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

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

controller.xml文件代码如下:

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

services.xml文件代码如下:

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

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

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

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

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

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

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

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

microsoft.aspnet.webapi

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

然后,再次执行程序:

运行结果无误:

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

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

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

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

我的email:3074596466@qq.com

如有谬误,欢迎指正!