Wpf 在运行时加载 dll
Wpf load dll at runtime
我在 WPF 中创建了应用程序,应用程序的一部分因每个客户端而异
目前,当我将应用程序部署到新客户端时,我必须创建新的 class 或修改旧的,因为每个客户端都有不同的业务逻辑。
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
只能使用反射来调用方法,别无选择。
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();
现在方法调用变得类型安全
我在 WPF 中创建了应用程序,应用程序的一部分因每个客户端而异
目前,当我将应用程序部署到新客户端时,我必须创建新的 class 或修改旧的,因为每个客户端都有不同的业务逻辑。
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
只能使用反射来调用方法,别无选择。
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();
现在方法调用变得类型安全