args adl factor ninject button his eal nodes
详细请看 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>
c# 依赖注入之 --- 反射 (转)
来源: http://www.bubuko.com/infodetail-2171940.html