zoukankan      html  css  js  c++  java
  • Spring.Net---1、IOC第一个实例

    Spring.NET IoC容器的用法。

    通过简单的例子学习Spring.Net

    1、先创建一个控制台程序项目。

    2、添加IUserInfoDal 接口。

    复制代码
    namespace Spring.Net
    {
        public interface IUserInfoDal
        {
            void Show();
        }
    }
    复制代码

    3、添加AdoNetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。

    AdoNetUserInfoDal.cs

    复制代码
    public class AdoNetUserInfoDal:IUserInfoDal
        {
            public void Show()
            {
                Console.WriteLine("我是 AdoNet Dal );
            }
        }
    复制代码

    EFUserInfoDal.cs

    复制代码
    public class EFUserInfoDal: IUserInfoDal
        {
            public void Show()
            {
                Console.WriteLine("我是EF Dal);
            }     
        }
    复制代码

    4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll

    5、添加Spring.Net配置节点,配置object节点

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <!--一定要在紧跟着configuration下面添加-->
      <configSections>
        <!--跟下面Spring.Net节点配置是一一对应关系-->
        <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
        </sectionGroup>
      </configSections>
      
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    
      <!--Spring.Net节点配置-->
      <spring>
        <context>
          <!--容器配置-->
          <resource uri="config://spring/objects"/>
        </context>
        <objects xmlns="http://www.springframework.net">
          <!--这里放容器里面的所有节点-->
          <description>An  example that demonstrates simple IoC features.</description>
          <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
          <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
          </object>      
      </spring>
    </configuration>
    复制代码

    6、开始写主函数,创建spring容器上下文

    复制代码
    namespace Spring.Net
    {
        class Program
        {
            static void Main(string[] args)
            {
                //控制权没有反转
                //IUserInfoDal infoDal = new EFUserInfoDal();
    
                //Spring.Net 创建实例的方式转为容器帮我们创建
                //创建spring容器上下文
                IApplicationContext ctx = ContextRegistry.GetContext();
                //通过容器创建对象
                IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
                efDal.Show();
                Console.ReadKey();
            }
        }
    }
    复制代码

    7、属性注入

    复制代码
    <!--Spring.Net节点配置-->
      <spring>
        <context>
          <!--容器配置-->
          <resource uri="config://spring/objects"/>
        </context>
        <objects xmlns="http://www.springframework.net">
          <!--这里放容器里面的所有节点-->
          <description>An  example that demonstrates simple IoC features.</description>
          <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
          <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
            <property name="Name" value="张三"/>
            <!--ref指向下面的属性注入-->
            <property name="UserInfo" ref="UserInfo"/>
          </object>      
    
          <!--属性注入-->
          <object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
            <property name="Name" value="李四"/>
            <property name="Age" value="15"/>
          </object>
        </objects>
      </spring>
    复制代码

    8、构造函数注入

    <!--构造函数注入-->
    <object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
       <constructor-arg index="0" value="张三"/>
       <constructor-arg index="1" ref="UserInfo"/>
    </object>

    9、容器配置

    复制代码
    <context>
       <!--容器配置-->
       <resource uri="config://spring/objects"/>
       <!--xml文件方式,更改属性,复制到输出目录:始终复制-->
       <!--<resource uri="file://objects.xml"/>-->
       <!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
       <!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
    </context>
    复制代码

    10、完整例子

    IUserInfoDal.cs

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Spring.Net
    {
        public interface IUserInfoDal
        {
            UserInfo UserInfo { get; set; }
            string Name { get; set; }
    
            void Show();
        }
    }
    复制代码

    AdoNetUserInfoDal.cs

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Spring.Net
    {
        public class AdoNetUserInfoDal:IUserInfoDal
        {
            public AdoNetUserInfoDal(string name, UserInfo userInfo)
            {
                Name = name;
                UserInfo = userInfo;
            }
            public UserInfo UserInfo { get; set; }
            public string Name { get; set; }
    
            public void Show()
            {
                Console.WriteLine("我是 AdoNet Dal ,属性注入:Name=" + Name);
                Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
            }
        }
    }
    复制代码

    EFUserInfoDal.cs

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Spring.Net
    {
        public class EFUserInfoDal: IUserInfoDal
        {
            public EFUserInfoDal()
            {
    
            }
            public UserInfo UserInfo { get; set; }
            public string Name { get; set; }
    
            public void Show()
            {
                Console.WriteLine("我是EF Dal,属性注入:Name=" + Name);
                Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
            }     
        }
    }
    复制代码

    App.config

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <!--一定要在紧跟着configuration下面添加-->
      <configSections>
        <!--跟下面Spring.Net节点配置是一一对应关系-->
        <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
        </sectionGroup>
      </configSections>
      
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    
      <!--Spring.Net节点配置-->
      <spring>
        <context>
          <!--容器配置-->
          <resource uri="config://spring/objects"/>
          <!--xml文件方式,更改属性,复制到输出目录:始终复制-->
          <!--<resource uri="file://objects.xml"/>-->
          <!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
          <!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
        </context>
        <objects xmlns="http://www.springframework.net">
          <!--这里放容器里面的所有节点-->
          <description>An  example that demonstrates simple IoC features.</description>
          <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
          <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
            <property name="Name" value="张三"/>
            <!--ref指向下面的属性注入-->
            <property name="UserInfo" ref="UserInfo"/>
          </object>      
          
          <!--构造函数注入-->
          <object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
            <constructor-arg index="0" value="张三"/>
            <constructor-arg index="1" ref="UserInfo"/>
          </object>
    
          <!--属性注入-->
          <object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
            <property name="Name" value="李四"/>
            <property name="Age" value="15"/>
          </object>
        </objects>
      </spring>
    </configuration>
    复制代码

    Program.cs

    复制代码
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    //Spring.Aop.dll 面向切面编程
    //Spring.Core.dll spring框架基础
    //Common.Logging.dll 这个必须也要引用
    
    namespace Spring.Net
    {
        class Program
        {
            static void Main(string[] args)
            {
                //控制权没有反转
                //IUserInfoDal infoDal = new EFUserInfoDal();
    
                //Spring.Net 创建实例的方式转为容器帮我们创建
                //第一步,引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll
                //第二步,添加Spring.Net配置节点
                //第三步,配置object节点
                //第四步,创建spring容器上下文
                IApplicationContext ctx = ContextRegistry.GetContext();
                //第五步,通过容器创建对象
                IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
                efDal.Show();
    
                IUserInfoDal adoDal = ctx.GetObject("UserInfoDal2") as IUserInfoDal;
                adoDal.Show();
    
                Console.ReadKey();
            }
        }
    }
    复制代码

    下面是MVC项目中使用Spring.Net融合的例子

    1、将Spring.net程序集复制到项目下的packages文件夹中。

    2、项目中添加引用Spring.Core.dll、Common.Logging.dll、Spring.Web.Mvc4.dll、Spring.Web.dll

    3、修改Web.config,配置节点

    复制代码
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <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/controllers.xml"/>
        </context>
      </spring>
    
    </configuration>
    复制代码

    4、项目中创建Config文件夹,controllers.xml文件。

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <objects xmlns="http://www.springframework.net">
    
      <object type="HX.Shop.UI.Main.Controllers.AdminController, HX.Shop.UI.Main" singleton="false" >
        <property name="AdminService" ref="AdminService" />
      </object>
      <object name="AdminService" type="HX.Shop.BLL.AdminService, HX.Shop.BLL" singleton="false" >
        
      </object>
    </objects>
    复制代码

    5、Global.asax 中修改 SpringMvcApplication

    public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication //System.Web.HttpApplication
  • 相关阅读:
    C#与JAVA平台RSA算法交互示例
    .NET_RSA加密全接触(重、难点解析)
    .NET和java的RSA互通,仅此而已
    数据库面试常问的一些基本概念
    亿级Web系统搭建——单机到分布式集群
    (译) JSON-RPC 2.0 规范(中文版)
    有趣的 Mysql 存储引擎
    zend opcache的最佳设置
    PHP注释的艺术——phpDoc规范
    说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
  • 原文地址:https://www.cnblogs.com/xiaohua19920/p/9633714.html
Copyright © 2011-2022 走看看