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>
  • 相关阅读:
    写在毕业季前
    使用Github Page鼓励自己每日编程
    win8/Metro开发系列一 Xaml布局
    AlertDialog详解
    安卓项目文件目录
    Andriod布局之LinearLayout
    Andriod定时任务
    android 设置布局横屏竖屏
    Android默认启动程序问题
    Android全屏显示
  • 原文地址:https://www.cnblogs.com/25miao/p/7183742.html
Copyright © 2011-2022 走看看