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>
  • 相关阅读:
    软件开发模式
    my parnter code review
    官僚模式和功能团队模式的优缺点
    思考题
    my code review
    四则运算
    Android Studio下使用Junit框架测试数组和
    SQL2008 存储过程 增删改查例子
    NET 无法显示XML页怎么办
    vs2010 2005 2008 代码前面出现··········取消方法
  • 原文地址:https://www.cnblogs.com/25miao/p/7183742.html
Copyright © 2011-2022 走看看