我在WPF中创建了应用程序,每个客户端的应用程序的一部分是不同的
在momenet上,当我将我的应用程序部署到新客户端时,我必须创建新类或修改旧类,因为每个客户端都有不同的商务逻辑。
对于2个客户来说没问题,但是它们越来越多。 我有想法为我的应用程序创建插件。 例如: 我创建了一个应用程序(核心),并只将自定义dll(插件)复制到磁盘上的特定文件夹
这是我的问题,这是一个好主意?考虑到一个客户端可能只有很少的插件,我不知道它是否足够高效。
我的样本:
interface IST
{
string Name { get; set; }
string WorkRequest(string connection);
void Start();
}
public partial class MainWindow : Window
{
public MainWindow()
{
var plcConnectionString = "";
string[] allPlugins = Directory.GetFiles(@"D:\app_plugins\", "*.dll", SearchOption.AllDirectories);
foreach (var item in allPlugins)
{
Assembly myassembly = Assembly.LoadFrom(item);
Type type = myassembly.GetType("appPlugins.ST");
object instance = Activator.CreateInstance(type);
MethodInfo[] methods = type.GetMethods();
object res = methods[0].Invoke(instance, new object[] { plcConnectionString }); // WorkRequest
}
}
}
所有插件实现接口IST
我可以以某种方式使用它而不是使用object
吗?
我用过它: http://www.codingvision.net/miscellaneous/c-load-dll-at-runtime
答案 0 :(得分:1)
使用反射调用方法只有没有其他选择。
object instance = Activator.CreateInstance(type);
MethodInfo[] methods = type.GetMethods();
object res = methods[0].Invoke(instance, new object[] { plcConnectionString });
例如,这里的methods[0]
是什么?
如果IST
是核心库中的已知类型,并且插件dll中的类实现IST
,请执行强制转换:
IST instance = (IST)Activator.CreateInstance(type);
instance.Start();
现在方法调用变得类型安全