我正在使用这种方法使我的C#应用程序可以为其他开发人员扩展:
Creating a simple plugin mechanism
它工作得很好,但仅限于“一个方向”,这意味着编写新插件的开发人员可以在插件中定义方法和变量,并将这些方法和变量导入到我的应用程序中。
所以现在我的问题是:如何在插件中访问我的主应用程序中已有的数据(例如变量“字符串测试”)?
答案 0 :(得分:0)
您需要创建一个" SDK"适用于您的插件编写者可用的应用程序。这应包含您希望从外部访问的任何内容的接口。
e.g。
<强> MyAppSdk.dll 强>
public interface IMyApplicationContext {
string SomeData { get; set; }
IMyAppService SomeService { get; set; }
}
public interface IPlugin {
void Do(IMyApplicationContext context)
}
<强>插件强>
public class MyPlugin : IPlugin {
public void Do(IMyApplicationContext context) {
context.SomeService.DoAThing();
System.Windows.MessageBox.Show(context.SomeData);
}
}
<强>应用强>
context = GetApplicationContext();
plugin.Do(context);
答案 1 :(得分:0)
有几种方法。
您可以创建Dictionary<string, object>
,其中每个模块都有权设置或获取数据。您应该编写一些逻辑来访问该字典。例如,T GetData<T>(string key)
方法可以为其带来一点安全性。
您可以在PRISM框架中使用EventAggregator
之类的事件系统来启用模块之间的通信。
但请注意,这将使您的模块相互依赖。这就是你应该处理的原因,例如:如果没有其他模块的数据。