这篇写一写如何使用Spring.net来解耦各个项目
1. 在接口层添加IStudentBLL文件,里面有GetStudent和GetAllStudents两个方法;然后在StudentBLL类里实现这两个方法。此外还要在StudentManageSystem.ViewModel层添加StudentViewModel。
注意,此处使用了属性StudentRepository,后期会用Spring.net将些属性注入
2. 添加单元测试工作,为BLL层写单元测试。此处引用了NSubstitute做为Mock工具,为BLL层隔离Repository层。具体的使用方法,可自行百度,此处不做解释。
3. 引用Spring.net里面的Spring.Core,为了能够实现注入,需要重新实现IControllerFactory接口,如下
public class SpringControllerFactory : IControllerFactory { /// <summary> /// Default ControllerFactory /// </summary> private static DefaultControllerFactory defalutf = null; public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName) { //get spring context //WebApplicationContext ctx = ContextRegistry.GetContext() as WebApplicationContext; var ctx = ContextRegistry.GetContext(); string controller = controllerName + "Controller"; //查找是否配置该Controller if (ctx.ContainsObject(controller)) { object controllerf = ctx.GetObject(controller); return (IController)controllerf; } else { if (defalutf == null) { defalutf = new DefaultControllerFactory(); } return defalutf.CreateController(requestContext, controllerName); } } public void ReleaseController(IController controller) { //get spring context IApplicationContext ctx = ContextRegistry.GetContext(); if (!ctx.ContainsObject(controller.GetType().Name)) { if (defalutf == null) { defalutf = new DefaultControllerFactory(); } defalutf.ReleaseController(controller); } } public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName) { return SessionStateBehavior.Default; } }