• Spring.NET依赖注入 制作可替换的算法


    1. 配置文件

    <configuration>
      <configSections>
        <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>

      <spring>
        <context>
          <resource uri="config://spring/objects"/>
        </context>
        
        <objects>
          <!-- Default Implement -->
          <object name="algHello" type="CsharpTrainer.Strategy.Hello.EngHello, CsharpTrainer.Strategy">
          </object>
          <!-- Extended Implement -->
          <!--<object name="algHello" type="CsharpTrainer.Strategy.Hello.ChnHello, CsharpTrainer.Strategy">
          </object>
    -->
        </objects>
      </spring>

      ...
    </configuration>

    2. 算法接口

      策略接口

    public interface IStrategy
        {
            void Execute();
        }

    算法1

    public class EngHello : IStrategy
        {
            public void Execute()
            {
                Console.WriteLine("Hello, World!");
            }
        }

    算法2

    public class ChnHello : IStrategy
        {
            public void Execute()
            {
                Console.WriteLine("你好, 世界!");
            }
        }

    3. Spring调用端

    public class HelloAlgorithm
        {
            public static void SayHello()
            {
                //从config文件中取得程序集信息
                IApplicationContext context = ConfigurationManager.GetSection("spring/context"as IApplicationContext;

                //调用方法
                IStrategy alg = context.GetObject("algHello"as IStrategy;
                alg.Execute();
            }

    4. 运行和替换

      运行程序,结果是Hello, World

      如果我们把算法配置换成

    <object name="algHello" type="CsharpTrainer.Strategy.Hello.ChnHello, CsharpTrainer.Strategy">
    </object>

      结果将是: 你好, 世界


       

    技术改变世界
  • 相关阅读:
    03Qt信号与槽(2)
    01Qt中的隐式共享
    10GNU C语言函数调用
    09GNU C语言程序编译
    第一本C语言笔记(下)
    07控制器和控制卡(3)
    06控制器和控制卡(2)
    集合
    linux指令(目录类操作指令)
    面向对象三大特征
  • 原文地址:https://www.cnblogs.com/davidgu/p/2526440.html
Copyright © 2020-2023  润新知