3

我终于开始玩弄 MEF,却发现解决我的旗舰问题并不那么简单。

问题: 我有一个 WCF 服务,它依赖于一些自定义算法,每个算法都存在于自己的程序集中。当一个方法被调用时,请求的数据契约的一部分将确定需要哪些算法。例如类 1 和类 2 各自实现 NameFile() 方法,而类 A 和 B 各自实现 EncryptFile()。

对服务的 WriteFile() 的一次调用可能需要调用 Two.NameFile 和 A.EncryptFile,而另一次调用可能需要 One.NameFile 和 B.EncryptFile。

尝试: MEF(我是新手)似乎是加载程序集的好方法,但到目前为止我发现似乎我需要通过许多步骤来确定在运行时哪些可用的合同会议组件符合需要。当仅在通话期间知道特定需求时,Plain Old Reflection 似乎是一种更直接的决定和加载方式。

问题 MEF 确实更适合其他动态加载场景,还是只是我的 MEF 新手?

谢谢,

约翰

4

1 回答 1

3

MEF 确实更适合其他动态加载场景,还是只是我的 MEF 菜鸟?

好吧,主要问题是在运行时确定哪些选项可以满足您希望使用的合同。

无论您选择什么 - 无论是 MEF、其他一些注入机制,还是使用反射滚动您自己的版本,都必须做出这种决定。

然而,MEF 仍然应该比滚动您自己的版本更简单,因为它很容易用于从所有可用程序集中[ImportMany]导入所有(或其他)实现。IFileEncryptor此时,从可用列表中确定正确的应该相当简单。

而使用反射,您可以从特定程序集中获取特定类型 - 这确实违背了动态执行此操作的目的。MEF 可以轻松扩展此服务,而无需重新编译或更改代码,因为您可以将新程序集放在适当的位置并使其自动被发现。

于 2012-05-04T21:43:16.323 回答