【问题标题】:dependencies between view, presenter and interface视图、演示者和界面之间的依赖关系
【发布时间】:2011-04-15 08:00:23
【问题描述】:

我遇到了一个经典的循环依赖问题,但我找到的解决方案(创建第三个程序集)似乎不适用于我的视图呈现器模式。

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

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

现在问题来了: 我需要在我的演示者/接口程序集中引用我的视图,以便能够使用我的一种视图类型(非系统类型、自定义控件)在我的接口中定义属性和访问器。 由于循环依赖,我不能,而且我认为即使我在第三个程序集中移动我的界面,我将始终在这个新程序集和视图之间有一张 CD(因为我的视图需要我的界面,我的界面需要我的查看)

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

这不容易说清楚,所以请随时问我,

非常感谢大家。

最好的问候。

【问题讨论】:

    标签: c# .net circular-dependency mvp


    【解决方案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 交给演示者,它会将自己绑定到需要查看任何地方?

    【讨论】:

    • 感谢您抽出宝贵的时间回复,这个周末我去看看
    • 我强烈反对。你给“理想的愚蠢”观点更多的任务。所有这些演示逻辑都应该进入演示者,最好是连线。想象一下,您有另一个视图应用程序,您也必须在那里进行所有调用。所以不需要IPresenter。只需将 IView 传递给 Presenter,让其处理即可。
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多