gpt4 book ai didi

c# - 有没有办法强制执行静态方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:24 25 4
gpt4 key购买 nike

有没有办法在系统初始化时强制执行静态方法?

我正在开发一个完全基于插件的系统。该项目的核心将包含系统状态,并将触发一些事件,插件可以在这些事件中连接并创建新功能。

我希望这个插件机制能够从插件中透明地完成。所有插件必须做的是实现系统核心的事件,它应该被正确执行。问题是我需要在每个插件上执行一些代码来挂接系统核心事件。我首先想到的解决方案是在这些插件中声明一些方法,这些方法将在加载程序集或类似的东西时执行,但显然静态构造函数仅在对他的任何字段进行某些引用时才执行;但在我的设计中无法做到:插件必须对系统核心保持不可见。

插件本质上是其他类或其他项目。

有什么想法吗?

谢谢。

最佳答案

我认为最简单的做法是为该方法定义一个通用名称(如 init())并在加载每个库后调用它。

更新,如评论所述

关键是要有一个共同的、定义良好的插件结构,所以在任何给定点加载哪个插件都没有关系,从核心的角度来看它们都是一样的。它可以做类似的事情

PluginType instantiatedPlugin=methodThatInstantiates(pluginClass);
instantiatedPlugin.init();

然后您可以循环遍历插件列表,大量实例化和初始化所有插件。

如果每个插件都是一个单独的DLL,列表可以是一个插件目录下的所有*.dll文件(添加一些安全验证)。

或者您可以使用反射来获取所有插件的类。如果这些类在同一个二进制文件中或者在您加载所有 DLL 之后,这是有效的。

如果所有插件都在同一个命名空间下,你可以很容易地做到这一点。请参阅:Getting all types in a namespace via reflection

关于c# - 有没有办法强制执行静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36814850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com