[.NET] 如何使用app config来动态变更载入的DLL(plug-in)

来源:互联网 发布:浅陌网络收徒 编辑:程序博客网 时间:2024/06/11 08:33

在本篇文章中,会示范如何在.NET中配合App config中的设定,来决定程序所要载入的dll及class

这种实作技巧,在plug-in中算是蛮常见的用法


首先,要宣告一个interface,就如下叫做Orz吧

并且将Orz放到一个独立的DLL项目中,并编译该DLL

public interface Orz{    int ID { get; set; }    void Test();}


 

再来建立一个Client的EXE档项目,我是使用Console项目,并放入下面代码

class Program{    static void Main(string[] args)    {        Console.WriteLine("============ Test interface Orz from config ============");        string DllName = ConfigurationSettings.AppSettings["DllName"];        string ClassName = ConfigurationSettings.AppSettings["ClassName"];        try        {            Orz orz = Assembly.Load(DllName).CreateInstance(ClassName) as Orz;            orz.ID = 999;            orz.Test();        }catch(Exception ex)        {            Console.WriteLine(ex.Message);        }        Console.ReadLine();    }}


 

App.config

<?xml version="1.0" encoding="utf-8" ?><configuration>    <appSettings>        <!-- you can test config 1 or 2 to test runtime change dll  -->                <!-- config 1-->        <!-- modify MyImplement.XD2 to test -->        <add key="DllName" value="MyImplement" />        <add key="ClassName" value="MyImplement.XD2" />        <!-- config 2-->        <!-- modify MyImplement2.Ghost to test -->        <!--        <add key="DllName" value="MyImplement2" />        <add key="ClassName" value="MyImplement2.Ghost" />        -->    </appSettings></configuration>


 

此时若执行起来,会出现

 

因为我在项目中并没有加上任何实作的参考.......

 

接下来加上两个dll项目,并且实践MyInterface中的Orz介面

 

 

public abstract class XD : Orz{    protected int id;    #region Orz Members    public virtual void Test()    {        Console.WriteLine("Do XD.Test(), ID[" + id + "]");    }    #endregion    #region Orz Members    int Orz.ID    {        get        {            return id;        }        set        {            id = value;        }    }    #endregion}

public class Ghost : Orz{    protected int id;    protected string name;    public Ghost()    {        name = "ghost";    }    #region Orz Members    public int ID    {        get        {            return id;        }        set        {            id = value + 100;        }    }    public virtual void Test()    {        Console.WriteLine("Do Ghost.Test(), ID[" + id + "], Name[" + name + "]");    }    #endregion}


然后编译整个项目,接下来将dll及exe及app.config复制到同一个文件夹中

 

接下来就可以修改app.config中的设定

plug-in不同的dll来执行了

 

 

范例下载