5年后——MEF中是否有懒惰的dll加载?

3
现在我们使用基本上是目录目录来初始化MEF。也就是说,所有程序集都被加载,即使那些没有使用的程序集。
好吧,我们已经修改了一点 - 所有程序集都在反射范围内进行检查,看它们是否具有某个程序集属性,只有具有这些属性的程序集才会被选择。
但仍然没有任何关于它的懒惰。一个特性可能永远不会被实际使用,但是实现它的程序集仍然会被加载。
我在同一主题上发现了这个5年前的问题 - Lazy Loading DLL's with MEF。如果我正确理解答案,那么当时没有懒惰加载(社区链接没有给我任何有用的东西)。
现在还是这种情况吗?我们可以有懒惰的dll加载吗?
这是我希望它工作的方式:
- 接口ISomeFeature在编译时已知,并且当然已经被加载。 - ISomeFeature的实现是SomeFeatureImpl,并且在任何代码都没有引用的程序集中找到。 - 希望使用该功能的任何人都依赖于ISomeFeature。
我希望只要不运行依赖于ISomeFeature的任何代码,就不会加载实现SomeFeatureImpl的程序集。显然,当执行依赖于ISomeFeature的代码时,必须加载实际实现(如果尚未加载),并成功解决依赖关系。
我要求太多了吗?MEF是否支持它?
1个回答

2

好的,也许不是五年后,但六年行吗?

我最近实现了你所说的东西 - MEF中的延迟程序集加载。像你所说的那样,它只会加载应用程序实际使用的插件,同时仍然允许您检查它们的元数据。但是,为了这样做,您需要预先序列化每个程序集的部分信息(可能在插件的后构建事件期间)。请注意,对于此解决方案,为了使程序集能够懒惰地加载,导入必须包装在Lazy<T>中。

欢迎您查看该项目并为其做出贡献。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接