2

私は古典的な循環依存の問題の前にいますが、私が見つけた解決策(3番目のアセンブリを作成する)は、私のビュープレゼンターパターンではうまくいかないようです。

ビューアセンブリでプレゼンターを参照する必要がありますビューアセンブリで(プレゼンターと同じアセンブリにある)インターフェイスを参照する必要があります

さて、プレゼンター/インターフェイスアセンブリはすべて同じ場所にあるので、ビューで参照します。

そして今、問題が発生します。ビュータイプ(非システムタイプ、カスタムコントロール)のいずれかを使用してインターフェイスのプロパティとアクセサーを定義できるようにするには、プレゼンター/インターフェイスアセンブリでビューを参照する必要があります。循環依存のためにできません。3番目のアセンブリでインターフェイスを移動しても、この新しいアセンブリとビューの間に常にCDがあります(ビューにはインターフェイスが必要であり、インターフェイスには見る)

目標は、プレゼンターからビュー内のコントロールにアクセスできるようにインターフェイスにプロパティとアクセサーを設定することです。そのため、インターフェイスでコントロールタイプを使用するには参照が必要です。

明確にするのは簡単ではないので、遠慮なく私に聞いてください、

みなさん、ありがとうございました。

よろしくお願いします。

4

1 に答える 1

1

インターフェースは、原則として独自に存在する必要があります。実装の分離が必要な場合 (ビューとプレゼンター間の参照など) は、インターフェイスを使用します。したがって、プレゼンター インターフェイスとビュー インターフェイスを用意する必要があります。一方が他方を認識するのではなく、両者が互いを認識する必要がある場合です。

例:

インターフェイス.dll:

public interface IMyView { string title; }
public interface IMyPresenter { string GetTitle(); }

View.dll:

public MyView : IMyView
{
    private IMyPresenter _myPresenter;
    public string Title { get { return _myPresenter.GetTitle(); } }
}

プレゼンター.dll:

public MyPresenter : IMyPresenter
{
    private IMyView _myView;

    public string GetTitle()
    {
        return ResourceManager["titleResource"];
    }
}

モデルビュープレゼンターについての私の理解では、ビューはプレゼンターが必要とするすべてを公開するだけではなく、ビューはプレゼンターについて知らないのではなく、IViewをプレゼンターに渡し、必要な場所でビューにバインドします?

于 2010-09-21T17:46:04.033 に答える