Csharp/C#教程:C#插件function的模式/方法分享


C#插件function的模式/方法

我正在开发一种新产品,最终将根据客户的个性化需求在其周围建立不同的function。 因此,我想实现能够部署插件的能力,核心应用程序将检测插件并相应地进行更改。 问题在于,该产品很可能会针对不支持System.Addin的早期版本的.Net或MEF的可能性。

那就是说,哪种模式/编程方法很适合支持C#中的插件? 我想完全远离第三方框架,尽管可以自由命名。 理想情况下,我希望能够插入插件,修改主菜单和/或上下文菜单和/或提供新服务。 在Java中,通过扩展点很好地处理了这个问题。 我基本上坚持写自己的扩展点管理器吗?

您希望查看System.Reflection命名空间以帮助您完成此任务。 一种方法是为您的插件类创建一个通用接口( 查找策略模式 ),然后在运行时使用reflection来查看给定文件夹中的所有dll(可能是exe所在的位置或特殊的加载项文件夹)包含该特定接口的类。 具体来说,保留一个类型的字典(具有您的特殊接口的字典,将其指定为插件类)。 一旦你有一个包含接口的类型列表,将它们指定为插件,你就可以使用System.Activator类随意动态实例化它们。 在应用程序启动时对加载项类进行初始探测,然后使用抽象工厂根据类型或使用.net属性可归因于类的其他元数据加载插件。

如果您需要特定的代码示例,我可以为您执行此操作,但是,如果您打算构建一个健壮且灵活的加载项系统,则应该花时间熟悉System.Reflection,System.Activator和.net属性

请享用!

我是一个Java人,但因为你的问题与软件设计模式有关…

战略模式很可能会在非常抽象的层面上帮助你。 所以,也许你的核心应用程序有一套非常基本的“策略”用于操作……而不是创建一个菜单栏,你可以调用一个简单的菜单栏策略对象来为你创建它。 然后,提供交换策略的方法(因此,部署插件本质上是在受影响的对象上调用一堆setStrategy()方法的问题,或者你喜欢)。 该插件将提供替代策略。 至于插件类的运行时加载,我不熟悉C#来回答这个问题。

正如我之前所说,这一切都非常抽象。 尽量避免reflection – 尽管有时是必要的,但使用reflection会有性能,安全性和设计缺点。

希望有所帮助!

几乎所有“插件”架构都将基于Builder模式的某些变体 – 几乎就是定义。

上述就是C#学习教程:C#插件function的模式/方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1041784.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

精彩推荐