使用MEF,我可以在导出任何类型之前使方法运行吗?

时间:2011-03-23 10:40:39

标签: .net mef

MEF中是否有办法在导出任何类型之前运行我的某个方法?

我在程序集A中使用MEF,而我正在使用的某些类型在另一个程序集中(B)。程序集B存储在程序集A的资源内(代码混淆的一部分),因此我需要处理AppDomain.AssemblyResolve事件,以便我可以加载程序集B.

所以我想在导出任何类型之前告诉MEF运行方法X(它将处理该事件)。目前,我需要向导出类型的所有构造函数添加代码,并避免在错误的位置使用程序集B中的任何类型(即,如果它们将在处理AssemblyResolve事件之前解析)。

1 个答案:

答案 0 :(得分:1)

如果您控制主机,则可以在进行任何合成之前运行代码。

听起来你正试图在扩展中执行此操作,但主机对混淆没有任何了解。 MEF没有任何明确的支持。您可以为所有导出使用自定义导出属性,并将代码放在导出属性的构造函数中,以确保加载程序集B.这违反了Export属性应该做的事情 - 它们应该只提供元数据,而不是实际运行代码,它可以执行任何操作。但是,它可能对你有用。

让我担心的另一件事是,作为扩展程序,您正在使用AppDomain.AssemblyResolve。我认为只会使用一个事件处理程序,因此如果主机或任何其他扩展程序想要挂钩此行为,它将不适用于所有人。