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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM