There are currently 3 types of instances creation policy in your framework :
1. "Shared" - Singleton pattern
2. "NonShared" - Prototype pattern
Consider adding 4th policy - "Pooling".
Framework can support pools for objects of specified maximum size to achieve instances reuse. Poolable objects can implement IDisposable where they should "clear up" themselves and prepare to be used by another thread. Framework can dynamically
increase objects count in pool up to pool's maximum size. Instance, returned to the client, is marked as "is use" until it's disposed - and being reclaimed by the framework's pool. Pools continue to live (and references to poolable objects are kept)
as long as the MEF container lives.
Any suggestions on the proposition ?