質問させていただきます。

任意の時点で動的にアセンブリを読み込み、解放する必要のあるソフトウェアの設計を行っています。
上の機能を実現するために、読み込むアセンブリごとに AppDomain を生成し、それにアセンブリの保有する
型を持たせる、という手段を検討しています。

そのために、System.Collections.Generic.Dictionary<System.String, System.AppDomain> 型のメンバを
用意することを考えました。しかし、AppDomain 生成 -> アセンブリをロード -> ディクショナリに追加、という
複雑な流れ (さらに解放の際も) を踏む必要がありながら Dictionary の Add や Remove が触れるというのは
あまりよい状況とは思えません。

ここで、
 1) Add / Remove をオーバーライドした Dictionary のサブクラスを使用する
 2) Dictionary を private にし、操作をラップするメソッドを実装する
の、どちらの解決方法をとった方が .NET のライブラリ設計として妥当なのでしょうか?