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>