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>
  • 相关阅读:
    Android零基础入门第34节:Android中基于监听的事件处理
    【洛谷】3953:逛公园【反向最短路】【记忆化搜索(DP)统计方案】
    【洛谷】1608:路径统计 1144:最短路计数
    【洛谷】1081:跑路【倍增】【最短路】
    照着例子学习protobuf-python
    NodeJs与ActionScript的GET和POST通讯
    编程语言应用领域(转)
    我是C#上层转到嵌入式和单片机的
    转发一位老师的文章,希望能给你带来帮助
    沈逸的IT专栏博客记录
  • 原文地址:https://www.cnblogs.com/25miao/p/7183742.html
Copyright © 2011-2022 走看看