If I have a SomeDisposableObject class which implements IDisposable:
class SomeDisposableObject : IDisposable
{
public void Dis
The reason you cannot safely call Dispose() on AContainer's instance of SomeDisposableObject is due to lack of encapsulation. The public property provides unrestricted access to part of the internal state. As this part of the internal state must obey the rules of the IDisposable protocol, it is important to make sure that is well encapsulated.
The problem is similar to allowing access to an instance used for locking. If you do that, it becomes much harder to determine where locks are acquired.
If you can avoid exposing your disposable instance the problem of who will handle the call to Dispose() goes away as well.