1. 程式人生 > >c# 依賴註入之---反射(轉)

c# 依賴註入之---反射(轉)

cti 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# 依賴註入之---反射(轉)