结构图动态加载插件 dll

本文关键字:dll 插件 加载 动态 结构图 | 更新日期: 2023-09-27 17:56:16

问题:将插件加载到控制台应用程序(Windows服务最终)并在dll的插件中运行代码

研究:结构图文档(当然)一些堆栈溢出线程是最接近的。使用 StructureMap 创建插件扫描器

我有 3 个项目:控制台应用(驱动程序)2 类库

控制台应用

static void Main(string[] args)
{
    ObjectFactory.Initialize(cfg => cfg.Scan(scanner =>
    {
        scanner.AssembliesFromPath(@"PATH TO PLUGIN DIR");
        scanner.AddAllTypesOf<IPlugable>();
    }));
    var list = ObjectFactory.GetAllInstances<IPlugable>();
    foreach (var plug in list)
    {
        plug.Run();
    }
}
public interface IPlugable
{
    void Run();
}

Plugin_2

public interface IPlugable
{      
    void Run();
}
public class PlugIn2 : IPlugable
{    
    public void Run()
    {
        Console.WriteLine(this.GetType().Name + "fired!");
    }
}

public interface IPlugable
{     
    void Run();
}
public class PlugIn1 : IPlugable
{          
    public void Run()
    {
        Console.WriteLine(this.GetType().Name + "fired!");
    }
}

输出:

ObjectFactory.GetAllInstances<IPlugable>();

不返回任何对象:(期望输出:2 Plugin_1 & Plugin_2 的对象实例

提前谢谢。

结构图动态加载插件 dll

看起来您正在使用 3 个不同的界面。它们都被称为"IPlugable",但驻留在不同的命名空间中,因此它们并不相同。

我想

这就是我要回答的答案。托管扩展性框架http://msdn.microsoft.com/en-us/library/dd460648.aspx

当您找到一个新框架来找到解决问题的确切解决方案时,一定会喜欢它。