视图,演示者和界面之间的依赖关系

时间:2010-09-21 17:18:39

标签: c# .net circular-dependency mvp

我遇到了经典的循环依赖问题,但我找到的解决方案(创建第三个程序集)似乎不适合我的view-presenter模式。

我需要在视图集中引用我的演示者 我需要在视图程序集

中引用我的界面(与演示者在同一个程序集中)

好的,所以我在视图中引用了我的演示者/接口程序集,因为它们都在同一个地方。

现在问题来了: 我需要在我的presenter / interfaces程序集中引用我的视图,以便能够使用我的一种视图类型(非系统类型,自定义控件)来定义我的界面中的属性和访问者。 我不能因为循环依赖,我认为即使我在第三个程序集中移动我的界面,我总会在这个新程序集和视图之间有一张CD(因为我的视图需要我的界面,我的界面需要我的视图)

目标是在我的界面中设置属性和访问者,以便能够从我的演示者访问我视图中的控件,因此我需要在界面中使用我的控件类型的引用。

要清楚并不容易,请随意向我提出更多信息,

非常感谢大家。

最好的问候。

1 个答案:

答案 0 :(得分:1)

接口应该作为一个规则存在。当您需要隔离实现时(例如在视图和演示者之间的引用中),您可以使用接口。所以你应该有一个演示者界面和视图界面,​​如果他们都知道彼此是必要的,而不是只知道另一个。

示例:

Interface.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(); } }
}

Presenter.dll:

public MyPresenter : IMyPresenter
{
    private IMyView _myView;

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

虽然在我对模型视图演示者的理解中,视图不会只宣传演示者需要的所有内容,并且视图不了解演示者,而是将IView交给演示者并且它将自己绑定到演示者到处查看necesarry?