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

在本篇文章中,会示范如何在.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来执行了

 

 

范例下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值