C#从外部DLL中的主应用程序获取函数

时间:2019-06-24 18:09:37

标签: c# dll plugins

我有一个主应用程序,可以从指定的文件夹加载DLL文件。我实现了一个接口,该接口已经允许我从DLL调用函数。

问题是,我不知道如何从DLL中的主应用程序访问变量和函数。

例如: 数据库连接在我的主应用程序中声明。我的插件(DLL)应该使用此连接,但我不知道如何访问它。 我应该引用.exe文件吗?还是创建一个可以以某种方式导出所需信息的助手DLL的好主意?

主要应用:

template<typename I>
void showList(I begin, I end);

接口的DLL

public void GetInstalledPlugins()
{
    List<IPlugin> actions = new List<IPlugin>();

    List<Assembly> allAssemblies = new List<Assembly>();
    string dllPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Plugins\";

    if (!Directory.Exists(dllPath))
        return;

    foreach (string dll in Directory.GetFiles(dllPath, "*.dll"))
    {
        try
        {
            Assembly currentDLL = Assembly.LoadFrom(dll);
            Type[] types = currentDLL.GetExportedTypes();

            for (int i = 0; i <= types.Length - 1; i++)
            {
                Type type = types[i];

                if (type.GetInterface("IPlugin") != null && type != null)
                {
                    IPlugin new_action = currentDLL.CreateInstance(type.FullName) as IPlugin;

                    if (new_action != null)
                    {
                        InstalledPlugins.Add(PluginInfos);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Print(ex.Message);
        }
    }
}

插件

public class PluginController
{
    public interface IPlugin
    {
        string PluginDescription { get; }
        void StartService(int ID);
    }
}

主应用程序应使用指定的ID启动插件。 每个插件都可以做任何想要的事情,并且应该从主应用程序中获取一些信息: 1.如果需要,什么是数据库骗局? 2.什么是日志路径? 3.安装了哪些插件 等等...

我可以在方法中传递值,但是如果插件甚至不需要它们,我不喜欢传递多个参数的想法。

感谢您的帮助!

0 个答案:

没有答案