这篇写一写如何使用Spring.net来解耦各个项目

1. 在接口层添加IStudentBLL文件,里面有GetStudent和GetAllStudents两个方法;然后在StudentBLL类里实现这两个方法。此外还要在StudentManageSystem.ViewModel层添加StudentViewModel。

注意,此处使用了属性StudentRepository,后期会用Spring.net将些属性注入

  Asp.net MVC + EF + Spring.Net 项目实践(四)

2. 添加单元测试工作,为BLL层写单元测试。此处引用了NSubstitute做为Mock工具,为BLL层隔离Repository层。具体的使用方法,可自行百度,此处不做解释。

  Asp.net MVC + EF + Spring.Net 项目实践(四)

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;
        }
    }
View Code

相关文章:

  • 2022-12-23
  • 2021-09-07
  • 2019-02-25
  • 2022-01-02
  • 2021-06-02
  • 2021-07-09
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-25
  • 2021-04-21
  • 2019-11-29
相关资源
相似解决方案