zoukankan      html  css  js  c++  java
  • 学习Spring.Net:1.简单的应用之控制台

    1.开始。

    2.新建一个控制台,我们新建一个SpringNetTest类。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SpringNetDemo
    {
       public class SpringNetTest
        {
            public void SayHello()
            {
                Console.WriteLine("SayHello");
            }
        }
    }

    2.首先我们用正常的方式在mian函数入口实例化这个SpringNetTest对象

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SpringNetDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                SpringNetTest springNet = new SpringNetTest();
                springNet.SayHello();
                Console.ReadKey();
            }
        }
    }

    4.很明显这个地方是直接New的,进行了强耦合,在实际的项目中这样写,未来需求变动是不利于修改的。面向对象思想中,我们要面向接口编程。接下来我提取一个接口,SpringNetTest继承这个接口。写一个简化版本的例子

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SpringNetDemo
    {
        interface IObjectNetTest
        {
            void SayHello();
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SpringNetDemo
    {
       public class SpringNetTest: IObjectNetTest
        {
            public void SayHello()
            {
                Console.WriteLine("SayHello");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SpringNetDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                IObjectNetTest springNet = new SpringNetTest();
                springNet.SayHello();
                Console.ReadKey();
            }
        }
    }

    这样的话,我们程序只要是依赖于IObjectNetTest而不依赖 SpringNetTest了,以后如果 不用SpringNetTest,但是只要是继承于IObjectNetTest对象都可以改。但是这个地方还是要修改 new SpringNetTest(),我们这个地方还是强耦合。那这个时候我们SpringNet就闪亮登场了。

    5.首先我们下载好了SpringNet的程序集,这是全部的 控制台我们只要前面4个基础的就好了

    6.修改配置文件AppConfig,和main方法代码,注入的方式好多种,我下面只列举了一种,具体的可以看文档

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
      <!--Spring-->
      <configSections>
        <!--spring容器对象的创建-->
        <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>
        <!-- Spring.Net对象容器的配置 -->
        <context>
          <!--要注入容器的对象的创建路径-->
          <resource uri ="config://spring/objects" />
          <!--<resource uri="file://~Config/common.xml" />-->
        </context>
        <objects  xmlns= "http://www.springframework.net" >
          <!--创建的对象-->
          <!--name:是定义启的名字,type:逗号前面是创建对象的命名空间,逗号后面是创建对象所在的程序集-->
          <object  name = "IobjectNetTest" type="SpringNetDemo.SpringNetTest,SpringNetDemo">
          </object>
        </objects>
      </spring>
      <!--Spring-->
    </configuration>
    using Spring.Context;
    using Spring.Context.Support;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SpringNetDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                //普通做法
                //IObjectNetTest springNet = new SpringNetTest();
    
                //SpringNet做法
                IApplicationContext ctx = ContextRegistry.GetContext();
    
                IObjectNetTest NetTest =(IObjectNetTest)ctx.GetObject("IobjetNetTest");
                NetTest.SayHello();
                Console.ReadKey();
            }
        }
    }

    这样的话,我们就完成解耦了。IobjectNetTest对象的就是通过Srping容器帮我们创建了。如果下次换成SummerNetTest,或者FallNetTest,或者WinterNetTest,不管你是春夏秋冬哪一个,只要继承了IobjectNetTest,都可以在AppConfig配置里修改一下配置,就可以完美切换了。这地方有一个很很牛逼的思想,我也不是很懂的思想,DIP-依赖倒置原则,IOC-控制反转,DI-依赖注入。 从上面的例子来说 IobjetNetTest我们从直接new 变成 交给了Spring容器,这个就是控制反转。创建的权利交给了Spring这个容器。就是设计模式里抽象工厂概念。DI依赖注入就是我们通过在配置文件里配置好,Spring 容器才可以创建。概念比较高深,我也不是很懂,我找了好多的博客:

     这个大牛的博客就很赞。https://www.cnblogs.com/liuhaorain/p/3747470.html#title_2

    以上内容都是本人学习巩固之用。

  • 相关阅读:
    《淘宝技术这十年》读书总结
    广告:互联网公司的纽带
    广告:互联网公司的纽带
    定期存款要及时
    定期存款要及时
    Java实现蓝桥杯VIP算法训练 自行车停放
    Java实现蓝桥杯VIP算法训练 自行车停放
    Java实现蓝桥杯VIP算法训练 自行车停放
    Java实现蓝桥杯VIP算法训练 数组逆序排列
    Java实现蓝桥杯VIP算法训练 数组逆序排列
  • 原文地址:https://www.cnblogs.com/DingKing/p/8056427.html
Copyright © 2011-2022 走看看