c# – 如何使用MEF允许插件覆盖现有功能?

我正在使用MEF来允许用户扩展我的C#库.它到目前为止工作得很好,但是现在我正试图以我以前没见过的方式使用它.

我到目前为止看到的MEF的主要用例是:

>应用程序公开原始接口(IPerson)
>外部库使用MEF和原始接口来扩展主库的功能(例如IPoliceman:IPerson,添加功能)
>然后,应用程序使用ImportMany搜索正确的IPerson,具体取决于它必须执行的操作

但我需要这样的事情:假设我有一个税收计算器,它接受一堆参数并根据这些参数返回估计税.我希望用户能够使用MEF创建插件修改这些计算的完成方式.应该只能在任何时候加载一个执行此操作的插件.否则,我如何决定使用哪种替代实现?

所以基本上,我的问题归结为:通常MEF允许添加类和方法的实现.如何使用它来允许用户替换实现?

解决方法

你所谈论的实际上只是看待同一问题的另一种方式.答案比听起来简单 – 对于您希望客户端能够覆盖的任何行为,只需将该行为放入插件中即可.

没有任何迹象表明你不能仅因为你是应用程序的作者而编写插件.将TaxCalculator类放在插件中,并公开一个界面,允许用户编写自己的税计算器.在运行时,如果您有多个已加载,请使用不属于您的那个.开箱即用,您将使用您的税务计算器插件,因此它将按照您期望的方式工作.如果用户创建自己的计税器插件并将其放在正确的目录中,则可以使用它,有效地允许它们“覆盖”您的原始功能.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...