编写大型项目的时候,经常需要引入插件系统以便对功能进行扩展,同时降低功能间的耦合性。
但一般的插件系统大量运用反射技术,并且需要动态加载、卸载插件,听起来和AOT格格不入。
确实,在AOT运行环境下,没有.NET运行时,这限制我们只能加载同样是AOT(或直接由native语言)编译的库。
那么如何实现这种需求呢?好在现在我们有一个现成的成熟技术可以运用:COM(Component Object Model,组件对象模型)。它可以带着.NET运行时使用,也可以直接使用C++/IDL这种native语言编写,并且完全面向对象,简直就是为了AOT的插件系统而设计的技术(虽然它甚至比.NET/C#更老)。