• 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>
  • 相关阅读:
    映射和分析
    文档操作
    向 Nginx 主进程发送 USR1 信号
    ES集群7.3.0设置快照,存储库进行索引备份和恢复等
    ES7.3.0配置邮件告警
    Elasticsearch 史上最全最常用工具清单
    Grok在线调试网址
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
  • 原文地址:https://www.cnblogs.com/25miao/p/7183742.html
Copyright © 2020-2023  润新知