2017-11-20 8 views
2

私は、アプリケーション用のプラグインで使用されるライブラリを構築していました。
このライブラリにはシングルトンが含まれています(シングルトンはここでは好きではないと知っています。
私の質問は次のとおりです。シングルトンと異なるライブラリのバージョン

2つのプラグインが異なるバージョンのライブラリでビルドされているとどうなりますか?

  • シングルトンクラスが変更されている場合にのみ問題ですか?
    • 追加されたメソッド/削除方法/変更された署名/実装
  • を変更したり、それが常に問題となっていますか?

編集:私は実行時にロードされる共有オブジェクトを参照していますプラグインによって 。基本的に、アプリケーションは既知の基本クラスを持つマクロを使用してクラスをエクスポートし、プラグインクラスを含むライブラリがロードされた後、これらのプラグイン(エクスポートされたクラス)をインスタンス化できます。 これらの基本クラスは、異なるタイプのプラグインを定義するだけです。私。

+1

変数が多すぎます。プラグインの意味を説明することで絞り込みを開始します。 – user4581301

+0

質問を更新しました。私は一般的な質問を維持しようとしていますが、答えがコンテキストに強く依存する場合は、詳細に入ることができます。 –

答えて

1

ライブラリが静的な場合は、プラグインのコードにコピーされているので問題はありません。

ダイナミックライブラリは、プログラム内部から参照されます。あなたのライブラリのv1.1を使用していたプラグインを使用していて、プラグインをロードしているアプリケーションがバージョン1.0を知っていると、クラッシュするまで奇妙なランタイム動作が発生する可能性があります。

最も簡単な方法は、getVersion()の機能を実装することです。アプリケーションは想定されたバージョンがターゲットシステムにインストールされていないかどうかをチェックし、そうでない場合は前のバージョンに戻すことができます。それは、どの機能を使用するか、どのような機能が変更されたか、どのように変更されたかによって異なります。

しかし最初の質問に戻るには:異なるバージョンを使用する2つのプラグインがあるかどうかは関係ありません。これらのプラグインの1つがターゲットにインストールされていないバージョンを使用している場合は重要です(動的libararyのみ)

+0

ありがとうございました!残念ながら、ベースアプリケーションを修正することはできません。明確ではない場合は、プラグインはすべて同じシングルトンインスタンスを使用する必要があります。したがって、アプリケーション全体に適用する必要があります。私はすでに、バージョンが同等であればそうであることを確認しました。私はロードされた最初のプラグインが、シングルトンのバージョンを作成すると仮定します。 新しいバージョンでビルドされた後続のプラグインは、シングルトンバージョンの新しいインスタンスを作成するか、新しいバージョンのヘッダーに定義されているコントラクトを使用して古いバージョンにアクセスしますか? –

+0

メインプログラムで、シングルトンを呼び出すことによって作成する場合は、新しいバージョンについて知らないコードを呼び出します。しかし、プラグインがシングルトンコード全体をコンパイルすると、インスタンスはそのコードから作成されている可能性が高いので、新しいバージョンです。しかし、私は古いバージョンを使うことをお勧めします。なぜなら、メモリオブジェクトがそれらのために整列されていないと、メインプログラムまたはプラグインが混乱する可能性があるからです。 – Detonar

+0

私はそれをアプリケーション全体に呼び出すことは、少し誤解を招くことでした。メインプログラムはシングルトンについても知らない。これはプラグインに含まれており、プラグインのみで使用されています。しかし、私が正しく理解すれば、シングルトンはアクセスする最初のプラグインによってのみ作成され、他のバージョンのプラグインとプラグインのバージョンを使用すると、そのバージョンを使用してメモリオブジェクトにアクセスしますか?これを回避するには、シングルトンを使用してすべての作業を行う*ワーカークラス*を管理し、プラグインがロードされるたびに*ワーカークラス*のバージョンをチェックし、古い場合はそれを置き換えます。 –

関連する問題