当前位置:   article > 正文

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

app.config 的 dll

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

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


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

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

  1. public interface Orz
  2. {
  3. int ID { get; set; }
  4. void Test();
  5. }


 

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

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Console.WriteLine("============ Test interface Orz from config ============");
  6. string DllName = ConfigurationSettings.AppSettings["DllName"];
  7. string ClassName = ConfigurationSettings.AppSettings["ClassName"];
  8. try
  9. {
  10. Orz orz = Assembly.Load(DllName).CreateInstance(ClassName) as Orz;
  11. orz.ID = 999;
  12. orz.Test();
  13. }catch(Exception ex)
  14. {
  15. Console.WriteLine(ex.Message);
  16. }
  17. Console.ReadLine();
  18. }
  19. }


 

App.config

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <appSettings>
  4. <!-- you can test config 1 or 2 to test runtime change dll -->
  5. <!-- config 1-->
  6. <!-- modify MyImplement.XD2 to test -->
  7. <add key="DllName" value="MyImplement" />
  8. <add key="ClassName" value="MyImplement.XD2" />
  9. <!-- config 2-->
  10. <!-- modify MyImplement2.Ghost to test -->
  11. <!--
  12. <add key="DllName" value="MyImplement2" />
  13. <add key="ClassName" value="MyImplement2.Ghost" />
  14. -->
  15. </appSettings>
  16. </configuration>


 

此时若执行起来,会出现

 

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

 

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

 

 

  1. public abstract class XD : Orz
  2. {
  3. protected int id;
  4. #region Orz Members
  5. public virtual void Test()
  6. {
  7. Console.WriteLine("Do XD.Test(), ID[" + id + "]");
  8. }
  9. #endregion
  10. #region Orz Members
  11. int Orz.ID
  12. {
  13. get
  14. {
  15. return id;
  16. }
  17. set
  18. {
  19. id = value;
  20. }
  21. }
  22. #endregion
  23. }

  1. public class Ghost : Orz
  2. {
  3. protected int id;
  4. protected string name;
  5. public Ghost()
  6. {
  7. name = "ghost";
  8. }
  9. #region Orz Members
  10. public int ID
  11. {
  12. get
  13. {
  14. return id;
  15. }
  16. set
  17. {
  18. id = value + 100;
  19. }
  20. }
  21. public virtual void Test()
  22. {
  23. Console.WriteLine("Do Ghost.Test(), ID[" + id + "], Name[" + name + "]");
  24. }
  25. #endregion
  26. }


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

 

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

plug-in不同的dll来执行了

 

 

范例下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/239414
推荐阅读
相关标签
  

闽ICP备14008679号