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>
原文地址:https://www.cnblogs.com/25miao/p/7183742.html