I am looking for a plugin-based application platform that is comparable to the Eclipse Plugin Framework, which, in my simple view, consists of:
- basic plugin infrastructure (Equinox / OSGI), which provides the ability to declare extension endpoints and then discover and load plugins that serve these endpoints. (this is different from Injection Dependency, but admittedly the difference is subtle. The configuration is very decentralized, there are problems with version control, this may include an online plugin repository, and, most important to me, it should be easy for the user to add plugins without needing any knowledge about the basic architecture / configuration files).
- many layers of plugins that provide a basic workbench with concurrency support, commands, preference sheets, menus, toolbars, key bindings, etc.
It just scratches the RCP surface, which in itself serves as the foundation of your application that you create, creating even more plugins.
This is what I learned from the Internet over the past couple of days ...
As far as I can tell, there is nothing in the .NET world that remotely approaches the reliability and maturity of Eclipse RCP for Java, but there are several competitors that perform well # 1 or # 2.
(I should also mention that I did not make a final decision on WinForms vs WPF, so I am also trying to understand the level of user interface interaction in any candidate structure. I am also interested in learning about the connection between the platform and the source code of licensing)
I have to say that open source material is generally less documented, but easier to understand, while MS material usually has more documentation, but is less accessible, so with many MS technologies I have to wonder what they are on in a practical sense.
These are the libraries I found:
Sharpdevelop
The first thing I looked at was SharpDevelop, which does both # 1 and # 2 in a basic way (no insult to SharpDevelop, which is amazing - I mean simpler than Eclipse RCP). However, SharpDevelop is more of an application than a framework, and there are basic assumptions and limitations (i.e., Some are related to WinForms). However, there are some articles about CodeProject explaining how to use it as the basis for an application.
System.addins
It seems that System.Addins is intended to create a reliable platform for loading add-ons with some complex parameters for loading assemblies with different levels of trust and even inaction. It appears to be mostly code-based and rather heavy code, with many assemblies that serve as isolation from version problems. Using Automation Automation to generate a lot of code.
So far, I have not found many System.AddIns articles that illustrate how it can be used to create something like RCP Eclipse, and many people seem to push their hands off its complexity.
Mono.Addins
Looks like Mono.Addins was influenced by System.Addins, SharpDevelop and MonoDevelop. It appears to provide the basics of System.Addins with less complex options for loading plugins, but more simplicity, with attribute-based registration, XML manifests, and infrastructure for online plugin repositories.
It has pretty good FAQs and documentation, as well as a fairly robust set of examples that really help to get a picture of how to develop an architecture similar to SharpDevelop or Eclipse. The examples use GTK for the user interface, but the structure itself is not related to GTK. So it looks like # 1 (loading the add-in) is pretty good, and points to the path to # 2 (workbench frame). It seems that Mono.Addins was obtained from MonoDevelop, but I did not really see if MonoDevelop supports a good kernel working environment.
Managed Extensibility Framework
This is what everyone is talking about at the moment, and it slowly becomes clear what it is doing, but I'm still pretty fuzzy, even after reading a few posts on SO. The official word is that it "can live side by side" with System.Addins. However, it does not refer to it and seems to reproduce some of its functionality. It seems to me that this is a simpler and more affordable alternative to System.Addins.
This seems to be more like Mono.Addins, as it provides attribute-based wiring. It provides "directories" that can be attribute based or directory based. It doesn't seem to provide any XML-based or manifest-based wired connections. So far, I have not found much documentation, and the examples seem to be kind of βmagicalβ and more reminiscent of attribute-based DIs, even though MEF is not a DI container.
His license has just been opened, but it refers to WindowsBase - not sure if this means that it is associated with Windows.
Acropolis
I am not sure what it is. Is it MEF or something else?
Composite Application Blocks
There are Composite Application WPF and Winforms blocks that appear to provide much more desktop features. I have very little experience with them, but they seem to rely on control automation, quite a bit, obviously, related to user interface layers. There are several examples of combining MEF with these application blocks.
I did my best to answer my own question here, but I really only scratch the surface and I have no experience with any of these frameworks. Hopefully some of you can add more details about the structures you encounter. It would be great if we could get some kind of comparative matrix.