XSockets插件框架AddLocation

时间:2014-04-28 10:48:32

标签: plugins xsockets.net

Composable.AddLocation对我不起作用,甚至加载了dll(我可以在输出窗口中看到它),但GetExport总是返回null。 我使用了http://xsockets.net/docs/the-plugin-framework

中的标准示例

这样可行:

Composable.LoadAssembly(Path.Combine(Helper.PluginsDirectory, "testplugin.dll"));

但这不是:

Composable.AddLocation(Helper.PluginsDirectory, SearchOption.AllDirectories, false);

所有其他代码都相同。

P.S。这是解决方案:当我删除XSockets Plug-in Framework dll和dll时,Composable.AddLocation开始工作,它描述了插件目录中的插件接口。

1 个答案:

答案 0 :(得分:0)

我的猜测是这样的: 你有" Helper.PluginsDirectory"中的文件。已经由插件框架加载。 如果你加载其中一个,你将无法获得导出。

解决方法......

class Program
{
    static void Main(string[] args)
    {
        Composable.RegisterExport<IAnimal>();

        //Helper that fix your issue...  
        Helpers.AddLocation(@"C:\Users\Uffe\Desktop\DynamicAssemblies\Implementation\bin\Debug", SearchOption.AllDirectories);

        Composable.ReCompose();

        var a = Composable.GetExports<IAnimal>();
        foreach (var animal in a)
        {
            animal.Says();
        }

        Console.ReadLine();
    }

}

public static class Helpers
{
    public static void AddLocation(string location, System.IO.SearchOption searchOption)
    {
        foreach (var assembly in Directory.GetFiles(location, "*.dll", searchOption))
        {                
            AssemblyName verifyName = AssemblyName.GetAssemblyName(assembly);                                   
            if(!Composable.LoadedAssemblies.Any(p => p.FullName == verifyName.FullName))  
                Composable.LoadAssembly(assembly);                
        }
    }
}