インターフェイスInterfaces.dll
を含む厳密な名前のアセンブリのバージョン 1 があるとします。IPlugin
public interface IPlugin
{
void InstallSelf(IPluginManager pluginManager);
}
多くのプラグインが実装されており、すべてがスムーズに実行されます。
ある日、ロードしたプラグインを確認できるように、プラグインに名前を付ける必要があると判断されました。したがって、Interfaces.dll
以下を含むバージョン 2 を生成します。
public interface IPlugin
{
string PluginName { get; }
void InstallSelf(IPluginManager pluginManager);
}
すべてのプラグイン実装者がプラグインをすぐに更新することは期待できないため、古いプラグイン バージョンに "Unknown" の PluginName を追加するアダプターを作成したいと考えています。そのようなアダプターを実装する方法はありますか? 私はそれが次のように見えることを望みます:
public sealed class PluginAdapter_v1_v2 : IPlugin[v2]
{
private readonly IPlugin[v1] _plugin;
public PluginAdapter_v1_v2(IPlugin[v1] plugin)
{
_plugin = plugin;
}
public string PluginName => "Unknown";
public void InstallSelf(IPluginManager pluginManager)
{
_plugin.InstallSelf(pluginManager);
}
}
しかし、どちらも と呼ばれているためIPlugin
、これは機能しません。IPlugin
別の方法として、名前をIPlugin_v1
andに変更するIPlugin_v2
か、同様の名前空間の名前変更を行うこともできますが、これには、新しいバージョンの があるたびにインターフェイス (または名前空間) の名前Interfaces.dll
を変更する必要があり、実装者はインターフェイスへのすべての参照を変更する必要があります。 (または名前空間) を最新のアセンブリ バージョンに更新します。だから、もう一度質問:
IPlugin
名前や名前空間を変更せずに、この種のアダプターを実装することは可能ですか?