0

Visual Basic .NETで開発されたかなり堅牢なプログラムがあり、基本的にプログラム全体を単一のオブジェクトとして表すAPIを作成しました。これは非常にうまく機能し、私たちは何年も使用してきましたが、今では、これの複数のインスタンスを実際に使用できるプロジェクトが登場しています。

問題は、コードベースにスタートアップモジュールのグローバル変数(gSvcMgr)への広範な参照があることです。このオブジェクトの複数のインスタンスが異なる変数を参照するようにするにはどうすればよいですか?名前空間を使用できますか?またはShadowsキーワード?

不明な点がある場合、または詳細が役立つ可能性がある場合は、構造をさらに説明できます。

グローバルのリファクタリングが唯一の選択肢であるかどうかは問題外ではありませんが、コードベースが非常に大きく、開発者はごくわずかです。

ありがとうございました!

4

1 に答える 1

1

AppDomain.CreateInstanceAndUnWrapを使用して、アプリケーション オブジェクトの各インスタンスを個別のアプリケーション ドメインに作成できます。これにより、オプションの各インスタンスが別のドメインに作成され、共有グローバル データの独自のコピーが作成され、互いに接触しなくなります。

ただし、アプリ ドメインを使用すると、パフォーマンス コストが発生します。すべてのメソッド呼び出しがアプリ ドメイン間でマーシャリング(読み取りコピー) されます。アプリケーション オブジェクトをMashalByRefObjectから派生させる必要もあります。

アプリ ドメインを使用して同様の問題を解決する例については、このブログ投稿を参照してください。

于 2012-07-20T01:58:25.693 に答える