代码之家  ›  专栏  ›  技术社区  ›  BenAlabaster

如何创建在app.config中定义的对象的实例而不引用项目中的程序集?

  •  1
  • BenAlabaster  · 技术社区  · 15 年前

    我从A继续 previous question 与加载app.config中指定插件的实例相关。

    我很好奇是否可以在不需要向我的项目中添加引用的情况下添加插件,如果可以,我该怎么做呢?

    <configuration>
      <appSettings>
        <add key="Plugin" value="Prototypes.BensPlugin, PrototypePlugins" />
      </appSettings>
    </configuration>
    

    所以现在我想用以下方法加载我的插件:

    string tn = /* Retrieve from config */
    Type t = Type.GetType(tn);
    IPlugin plugin = (IPlugin)Activator.CreateInstance(t);
    

    考虑到插件的性质,我认为我的程序集不需要引用它。似乎type.gettype()要求插件程序集位于引用列表(或GAC?)中。这让我相信这不是插入特性的正确方法。

    这是可能的还是我找错方向了?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Manitra Andriamitondra    15 年前

    基本上,添加这行代码

    System.Reflection.Assembly.Load("PrototypePlugins");
    

    之前 type.gettype(tn)类型; 如果prototypepplugins.dll与当前执行的程序位于同一目录中,则执行该任务。但是,请注意 无法卸载该程序集 .

    更好的方法是在另一个AppDomain中加载该程序集,这样您就可以通过终止AppDomain来卸载它。但这并不简单,因此我建议您使用这样一个IOC容器: http://www.castleproject.org/container/

    Manitra。

        2
  •  0
  •   David Basarab    15 年前

    您需要加载程序集 Assembly.Load() 然后在程序集的类型中查找正确的类型对象 assembly.GetTypes() .