|
In terms of your specific question, MEF does have some versioning support in that contracts are just strings rather than hard references. Combining this with our contract adapter support means you can have an app that imports a V2 version of a contract,
yet the exporter is a V1. The contract adapter will allow you to wrap the V1 so it looks like a V2. To the app it will be transparent.
As far as the general differences between MEF and MAF, they both focus on two different sets of problems.
System.Addin is a great technology for addressing issues around versioning resliance, isolation and recoverability.
• Using System.Addin allows you to host different components in separate app domains, thus allowing those addins to have different versions of assemblies which they reference which all run in the same process.
• System.Addin allows you to separately version Addins so that you could have two versions of an Addin sitting side by side.
• System.Addin manages automatically unloading app-domains they are no longer used thus allowing you reclaim memory.
• System.Addin has a bunch of security infrastructure (addins run in a sandbox) to ensure that components that are loaded do not have unauthorized access to data in the rest of the app.
• System.AddIn allows your app to gracefully recover whenever one of the addins crashes (this is due to isolation)
MEF on the other hand is a great technology for discovery and composition
• MEF composes deep object hierarchies of components
• MEF abstracts components from static dependencies.
• MEF can allow components to be lazily loaded and lazily instantiated.
• MEF provides a cataloging mechanism and rich metadata for components to allow them to dynamically discovered.
• MEF can compose components from various programming models, it is not bound to static types.
There is some overlap, in that System.Addin can do some discovery through its token mechanism, and MEF can do some versioning due to its loosely coupled dependency mechanism and contract adapters. However the support is minimal compared to the specialization
of each of the technologies.
As far as the long term perspective, MEF is being position as the framework for extensibility going forward.
Hope this helps.
Glenn
|