C#の画像処理アプリケーションでプラグインを使用するオプションを追加しようとしています。クラスのインターフェイスのみがわかっているときにシリアル化されたオブジェクトをロードする
私はAssembly.LoadFromメソッドを使用してクラスライブラリを読み込んだ後、インターフェイスを探してActivator.CreateInstanceを使用してプラグインのインスタンスを作成しました。これはIPluginインターフェイスから継承したクラスで、両方で参照されていますアセンブリ。 (like in the following example)IPluginインターフェイスを実装するときにアセンブリを読み込むと問題はありません。
画像処理のための別のクラスライブラリに抽象クラスを持っている私はまた、私はImageProcessingActionそれを呼びました。イメージ処理ライブラリを使用して、イメージに対して実行するアクションのリストを作成し、シリアル化されたファイルに保存することもできますが、この抽象クラスを実装するプラグインを作成するオプションを追加することもできます(ImageProcessingAction)別の方法で新しいアクションを作成します(これもうまく動作します)。
実際の問題は、このアクションのリストをシリアル化するときです。プラグインのImageProcessingAction実装のリストをシリアル化すると動作しますが、逆シリアル化すると、 "Unable to find assembly Plugin1"という例外がスローされ、IPluginを実装し、インスタンスを作成してシリアル化しましたそのフィールドのです。
私はpictureとのより良い自分自身を説明できると思う:
私はちょうど直列化復元もプラグイン内から動作しないことに気づきました!同じ例外、「アセンブリPlugin1が見つかりません」。デシリアライズするように変更する前に、アセンブリがアンロードされている可能性がありますか?何らかの理由でシリアライズすることができます...
私はすべてを試しましたが、私はまだ無知です。
デシリアライゼーションルーチンの例はありますか? –
特別なものはありませんが、私は[Serializable]属性を使用しました。 http://pastebin.com/Nt5A0tYj 元々、プラグイン内から作成されたImageProcessingActionオブジェクトであるplugin.Actionをシリアル化しようとしました。どちらの方法でも動作していないようです。たとえ、IPluginオブジェクトをシリアル化しても、同じことがシリアル化され、デシリアライズが失敗します。 – Symbol
私が投稿したリンクから解決策を試してください。 –