zoukankan      html  css  js  c++  java
  • Spring.net介绍及MVC中应用

    Spring.net两大核心内容:

    • IOC(控制反转)

    传统的面相对象思维模式是对象A依赖对象B,对象B的实例化和调用都在对象A中发生,一旦对象B中发生变化,对象A也要随之变化,这样使得程序间行程了紧密的耦合度

    IOC是一种编程思想,其理念就是借助于第三方来实现解耦。IOC核心是一个IOC容器,所有对象的控制权全部交给IOC容器,由IOC容器负责创建对象。模式由原来的创建对象--使用对象到被动接收IOC容器创建对象--使用对象,此期间对对象的控制权反生了转变,因此被称为控制反转

    • DI(依赖注入)

    DI是实现控制反转的一种编程方式,简单来说就是在A对象中需要使用到B对象,则在A对象中必要new B( ),但是假设B对象发生变化,实例化时传入参数发生变化,这时候 就需要修改A的代码。

    解决的办法很简单,就是将B作为对象传入,A对象内直接接收  this.b = B ;

    介绍完原理来看一看使用方法:

    1. 下载Spring.net包   下载地址:http://www.springframework.net/download.html

    2. 解压并拷贝 Spring.NET-1.3.1in et4.0 elease 目录下

    Common.Logging.dll
    Spring.Core.dll
    Spring.Web.dll
    Spring.Web.Extensions.dll
    Spring.Web.Mvc.dll

    的拓展文件到项目lib目录下,并在Web项目中添加引用

    3. 在项目下添加Config目录,创建 controllers.xml 

    在controllers.xml 中注册控制器类

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net">
    
      <object type="MyProject.Controllers.UserInfoController, MyProject" singleton="false" >
        <property name="userInfoService" ref="UserInfoService" />
      </object>
    
      <!--intentionally do NOT register the AccountController with the container; demonstrates that the underlying
      default controller factory will properly (attempt to!) resolve all controllers not registered with Spring.NET
      using its default controller resolution behavoir-->
      <!--<object type="Spring.MvcQuickStart.Controllers.AccountController, Spring.MvcQuickStart" singleton="false" />-->
    </objects>

    object节点用于注册控制器,

    type属性下以此声明 命名空间+类名 , 程序集,

    property属性用于声明控制器类中的属性,如果是引用类型需要用ref指向其Service.xml下注册对象类的name属性

    4. 在Config目录下创建一个Service.xml

    在此xml文件下注册BLL层中各个类 

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

    5.在Web.config文件下注册以下信息

    在<configSections><configSections>节点下添加

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

    在根节点<configuration></configuration>节点下添加

      <spring>
        <!--spring.Net配置-->
        <context>
        <!--修改成相应的目录-->
          <resource uri="file://~/Config/controllers.xml"/>
          <resource uri="file://~/Config/Service.xml"/>
        </context>
      </spring>

    6.最后别忘了修改Golbal.asax入口文件

        public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
        }

    至此就已经完成了业务层与逻辑层的解耦

    在Controller控制器下仅需要声明属性,程序运行时便会自动传入相应的对象

    private IUserInfoService userInfoService { get; set;}
  • 相关阅读:
    RHCE考试要求
    c语言:md5函数
    c语言:计算输入字符个数
    IP数据报之Internet Header Length
    常用的tar和rpm命令参数
    Oracle数据库实例的创建、删除、修改【转载】
    Internal类或Internal成员讲解
    序列化与反序列化 BinaryFormatter.Serialize 方法 (Stream, Object)
    oracle网络配置listener.ora、sqlnet.ora、tnsnames.ora
    Oracle启动模式及其常见问题探讨
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/7697512.html
Copyright © 2011-2022 走看看