对不起,如果我不够清楚,我很难写这个问题。
我下载了一个开源软件。我想扩展功能,所以我想创建封装功能的模块,这些模块将是 .dll 文件。 我想要一个完全独立于另一个:如果我在配置文件中将一个键设置为 true 并且如果文件夹中存在 DLL,则应该加载插件。
问题是:如何动态调用插件(仅应用插件调用)?
如果我直接引用插件类,我将不得不引用插件dll,但我希望能够在没有插件的情况下运行核心软件。是否有任何设计模式或其他机制允许我仅在应用插件时加载和使用 DLL,并且仍然可以在没有插件的情况下运行核心软件?
最佳答案
有多种方法可以实现这一点,我将在此处描述一个简单的解决方案。
创建一个公共(public)接口(interface),每个插件都必须实现,以便与核心应用程序集成。这是一个例子:
// Interface which plugins must implement
public interface IPlugin
{
void DoSomething(int Data);
}
// Custom plugin which implements interface
public class Plugin : IPlugin
{
public void DoSomething(int Data)
{
// Do something
}
}
要真正从 dll 加载插件,您需要使用反射,例如:
// Load plugin dll and create plugin instance
var a = Assembly.LoadFrom("MyCustomPlugin.dll");
var t = a.GetType("MyCustomPlugin.Plugin");
var p = (IPlugin)Activator.CreateInstance(t);
// Use plugin instance later
p.DoSomething(123);
您可以为您的插件程序集和类使用某种命名约定 以便您可以轻松加载它们。
关于c# - 如何创建仅在插件可用时才调用函数的插件机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926287/