zoukankan      html  css  js  c++  java
  • 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>

      结果将是: 你好, 世界


       

    技术改变世界
  • 相关阅读:
    【Docker】(6)---Dockerfile文件
    【Docker】(5)---springCloud注册中心打包Docker镜像
    【Docker】(4)搭建私有镜像仓库
    【Docker】(3)---linux部署Docker及Docker常用命令
    【Docker】(2)---仓库、镜像、容器
    【Docker】(1)---Docker入门篇
    【Maven】---Nexus私服配置Setting和Pom
    【Maven】---Linux搭建Nexus3.X私服
    【Maven】---坐标与依赖
    go语言path包和filepath包的学习与使用
  • 原文地址:https://www.cnblogs.com/davidgu/p/2526440.html
Copyright © 2011-2022 走看看