我有一个主应用程序,可以从指定的文件夹加载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.安装了哪些插件 等等...
我可以在方法中传递值,但是如果插件甚至不需要它们,我不喜欢传递多个参数的想法。
感谢您的帮助!