2

インターフェイス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_v1andに変更するIPlugin_v2か、同様の名前空間の名前変更を行うこともできますが、これには、新しいバージョンの があるたびにインターフェイス (または名前空間) の名前Interfaces.dllを変更する必要があり、実装者はインターフェイスへのすべての参照を変更する必要があります。 (または名前空間) を最新のアセンブリ バージョンに更新します。だから、もう一度質問:

IPlugin名前や名前空間を変更せずに、この種のアダプターを実装することは可能ですか?

4

2 に答える 2