私のプロジェクトでサードパーティのライブラリを使用しています。私のプロジェクトでは、ユーザーが実行時に動的にロードされ、独自のプラグインを作成することを可能にするプラグインシステムがあります。2つの外部ライブラリから参照される静的クラス - それぞれが独自のバージョンを参照できますか?
var plugin = Assembly.LoadFrom(pathToPluginDLL);
// later on, the constructor from the user plugin is loaded
pluginConstructor.Invoke();
私はこれらのユーザーのプラグインの一つが、その私の同じサードパーティのライブラリを参照しているというシナリオを持っています主なプロジェクトの使用。そのサードパーティライブラリには、メインプロジェクトで一意で、ユーザープラグイン固有の静的オブジェクトがあります。同じサードパーティのDLLを参照するユーザーのプラグインの一つで
// This is a class within a 3rd party DLL, referenced directly from the main project
public class SomeClassWithStaticObjects
public static string staticString {get; set;}
}
// In the main project
SomeClassWithStaticObjects.staticString = "main project static string";
:ここ
は何が起こるかの迅速な不自然なコード例ですSomeClassWithStaticObjects.staticString = "plugin project static string";
SomeClassWithStaticObjects.staticString
が参照しているという問題リフレクションを使用して読み込まれたメインプロジェクトとプラグインとの間の同じ静的オブジェクト。ユーザープラグインを自分のメモリ空間に「隔離」して静的クラスの独自のバージョンを持つことができる方法はありますか?
非静的オブジェクト:) ie ....グローバルを避ける –
何が問題なのですか(解決されていないと悪い結果になります)? –
アダプターのパターンを使用して、それをラップすることができます。これにより、これらの外部オブジェクトもすべてコード内でより直交して見えるようになります。あなたのアプリケーション内でもっと統一的なコードのセットを促進すると、私は望むでしょう... – code4life