StructureMap动态加载插件Dll

时间:2011-05-10 17:54:31

标签: c# ioc-container structuremap

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

研究: StructureMap文档(当然) 一些stackoverflow线程这一个最接近。 Creating plugin scanner with StructureMap

我有3个项目: 控制台App(驱动程序) 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的对象实例&amp; Plugin_2

提前致谢。

2 个答案:

答案 0 :(得分:2)

看起来您正在使用3种不同的界面。它们都被称为“IPlugable”,但它们位于不同的名称空间中,因此它们不相同。

答案 1 :(得分:1)

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

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