zoukankan      html  css  js  c++  java
  • c# 依赖注入之---反射(转)

    详细请看http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html

    定义一个接口,和两个类(实现该接口)

    IButton:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ReflectionInjection
     8 {
     9     internal interface IButton
    10     {
    11         string ShowInfo();
    12     }
    13 }

    WindowsButton:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ReflectionInjection
     8 {
     9     internal sealed class WindowsButton : IButton
    10     {
    11         public string Description { get; private set; }
    12         public WindowsButton()
    13         {
    14             this.Description = "Windows风格按钮";
    15         }
    16         public string ShowInfo()
    17         {
    18             return this.Description;
    19         }
    20     }
    21 }

    MacButton:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ReflectionInjection
    {
        internal sealed class MacButton : IButton
        {
            public String Description { get; private set; }
            public MacButton()
            {
                this.Description = " Mac风格按钮";
            }
            public string ShowInfo()
            {
                return this.Description;
            }
        }
    }

    ReflectionFactory:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace ReflectionInjection
    {
        internal static class ReflectionFactory
        {
            private static string _buttonType;
            static ReflectionFactory()
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(Environment.CurrentDirectory + "\Config.xml");
                XmlNode xmlNode = xmlDoc.ChildNodes[1].ChildNodes[1];
                _buttonType = xmlNode.ChildNodes[0].Value;
                
            }
            public static IButton MakeButton()
            {
                return Assembly.Load("ReflectionInjection").CreateInstance("ReflectionInjection." + _buttonType) as IButton;
            }
        }
    }

    主入口:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ReflectionInjection
    {
        class Program
        {
            static void Main(string[] args)
            {
                //ReflectionFactory
                IButton button = ReflectionFactory.MakeButton();
                Console.WriteLine("创建 " + button.ShowInfo());
                Console.ReadLine();
            }
        }
    }

     xml:

    <?xml version="1.0" encoding="utf-8" ?>
    <config>
      <window>MacWindow</window>
      <button>MacButton</button>
      <textBox>MacTextBox</textBox>
    </config>
  • 相关阅读:
    汇编实现点亮Led灯(2440)
    BootLoader(2440)核心初始化代码
    学习单片机的正确方法(转载)
    ARM-汇编指令集(总结)
    BootLoader的架构设计
    统计单词数(WordCount)
    OPcache
    phpcon china 2017听讲总结
    php-fpm进程内存泄漏
    mysql字符串的隐式转换导致查询异常
  • 原文地址:https://www.cnblogs.com/25miao/p/7183742.html
Copyright © 2011-2022 走看看