![]() |
1
2
在一篇简短的文章中,要为这个问题提出一个好的架构并不容易。 首先,我定义一个契约(一个接口),用户编写/修改的每个模块都必须实现。它至少应该包含一个Execute方法。
然后我会得到一个包含所有模块包装器集合的shell。任何成功编译的包装器都会让Shell调用模块接口的Execute方法。 在动态编译和执行代码时,此链接应提供所需的所有信息: http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm |
![]() |
2
0
好吧,一种充满活力的语言肯定是最合适的。。。 您可以使用 System.Reflection.Emit 然而, 因为您需要将这些动态程序集加载到自定义应用程序域中,否则将无法再次卸载它们。 这再次意味着您必须解决与跨AppDomain通信相关的封送处理和程序集解析问题。 |
![]() |
3
-1
您可能正在寻找的是依赖注入的概念。
有几种实现依赖注入的方法。一种方法是引用每个模块中的接口,并显式地让应用程序使用接口的正确实现配置其每个模块。 实现它的第二个方法(在您的情况下可能是最有用的方法)是使用中央注册表。定义要在应用程序中包含的所有接口。这些是要为其动态更改实现的接口。然后定义这些接口的标识。这些可以是字符串、整数或GUID。
使所有模块在需要使用其中一个模块时都转到这个中心注册表。确保它们不直接访问模块,但它们只通过注册表传递。例如。
如果现在要更改应用程序中接口的实现,只需更改注册表中的条目,如下所示:
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 3 月前 |
![]() |
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 4 月前 |
![]() |
CactusCake · if语句中应有分号 5 月前 |
![]() |
Bin4ry · 子文件夹中的应用程序设置 5 月前 |