zoukankan      html  css  js  c++  java
  • OA项目Ioc DI(二)

    依赖注入:属性和构造函数的注入

    一个简单的Demo:

    IUserInfoDal接口:

    public  interface IUserInfoDal
        {
           void Show();
           string Name { get; set; }
        }
    }
    

     UserInfoDal继承IUserInfoDal:

     public class UserInfoDal:IUserInfoDal
        {
    
            public void Show()
            {
                Console.WriteLine("hellow world");
            }
        }
    

     建立SpringNetDemo的控制台应用程序:

    static void Main(string[] args)
            {
                //IUserInfoDal userInfoDal = new UserInfoDal();
                //userInfoDal.Show();
    
                //容器来 创建UserInfoDal实列
    
                //第一步  初始化容器
                  IApplicationContext ctx = ContextRegistry.GetContext();
    
                IUserInfoDal dal = ctx.GetObject("UserInfoDal") as  IUserInfoDal;
                dal.Show();
    
                Console.ReadKey();
            }
    

     在App中进行配置:(<configuration> 节点中

     <!--sectionGroup  中的name要与 下面的标签名字一样 spring-->
      <configSections>
        <sectionGroup name="spring">
          <!--spring 分成两个子块-->
          <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
        </sectionGroup>
      </configSections>
    

     对sectionGroup的name进行配置:

    <spring>
        <!--Spring.Net对象容器的配置-->
        <context>
          <!--容器里面的所有的对象在哪里配置的?-->
    
          <!--使用xml文件的配置-->
          <!--<resource uri="file://Dals.xml"/>-->
         <!--使用程序集的配置-->
          <!--<resource uri="assembly://SpringNetDemo/SpringNetDemo/Dals.xml"/>-->
    
          <resource uri="config://spring/objects"/>
    
        </context>
        <!--objects:配置的容器的里面的对象的-->
        <objects xmlns="http://www.springframework.net">
          <description>An  example that demonstrates simple IoC features.</description>
          
          <!--名字为类名--> 
          <!--<object name="UserInfoDal" type="SpringNetDemo.UserInfoDal, SpringNetDemo">-->
            <object name="UserInfoDal" type="SpringNetDemo.EFUserInfoDal, SpringNetDemo">
    <!--属性的配置--> <property name="Name" value="Spring牛"/> </object> <!-- 把UserInfoDal属性注入到UserInfoServce--> <!--<object name="UserInfoServce" type="SpringNetDemo.UserInfoServce, SpringNetDemo"> <property name="UserInfoDal" ref="UserInfoDal"/> </object>--> </objects> </spring>

    XMl文件中的配置:

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.net
    		http://www.springframework.net/xsd/spring-objects.xsd">
    
      <object name="UserInfoDal1" type="SpringNetDemo.UserInfoDal, SpringNetDemo">
        <!--<constructor-arg index="0" value="movies.txt"/>-->
      </object>
    
    </objects>
    

     Spring.Net与项目结合:

    1.在Web.Config中configuration  节点中进行配置

     <configSections>
        <!--  Entity Framework 块配置-->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    
        <!--Spring.Net块配置-->
        <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
        </sectionGroup>
      </configSections>
    
      <!--Spring.Net 的容器的配置节点-->
      <spring>
        <context>
          <resource uri="file://~/Config/services.xml"/>
          <resource uri="file://~/Config/controllers.xml"/>
        </context>
      </spring>
    

     2.在Global.asax中改成Spring.Web

     public class MvcApplication :Spring.Web.Mvc.SpringMvcApplication 
    

     3.在packages中引入dll文件

    4.在Portal中新建文件夹Config

      1.controllers.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net">
    
      <!--前面是类的全名称 后面是类的程序集   singleton="false" 每次都是创建一个心对象 不是共用一个对象 -->
      <object type="SunOA.UI.Portal.Controllers.UserInfoController,SunOA.UI.Portal" singleton="false" >
        <!--属性的注入-->
        <property name="UserInfoService" ref="UserInfoService" />
      </object>
    </objects>
    

     2.services.xml

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

     3.控制器。

     public IUserInfoService UserInfoService { get; set; }
     public ActionResult Index()
            {
                ViewData.Model = UserInfoService.GetEntites(u => true); 
                return View();
            }
    

     BLL层的代码(继承于接口):
      

       public class OrderInfoService : BaseService<OrderInfo>, IOrderInfoService
    
        public interface IUserInfoService : IBaseService<UserInfo>
    

     IBLL层的代码:

        public interface IOrderInfoService : IBaseService<OrderInfo>
    

    Spring.Net程序的作用:

    1.程序加载的时候,第一次请求过来的时候,初始化容器对象。

    2.加载XML文件放到内存里面。

    3.根据容器里面的XML配置创建对象

    4.第二次和以后请求过的时候重复 第三个步骤

  • 相关阅读:
    Knockout应用开发指南 第十章:更多信息(完结篇)
    Knockout应用开发指南 第九章:高级应用举例
    汤姆大叔博客索引
    HTML5学习笔记简明版(1):HTML5介绍与语法
    HTML5学习笔记简明版 目录索引
    大叔手记(1):使用Visual Studio的查找与替换替代默认的系统搜索
    微软ASP.NET站点部署指南(9):部署数据库更新
    微软ASP.NET站点部署指南(11):部署SQL Server数据库更新
    彻底搞定C指针
    linux svn 使用
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/6431165.html
Copyright © 2011-2022 走看看