2012-07-20 76 views
2

MVC中,视图向控制器发送事件,控制器将这些事件发送给模型。该模型通过控制器将更改发送到视图。 (这是通过构造函数手动注入依赖关系 - 不使用框架)不可能(导致单元测试代码更难),所以引入了循环依赖关系。我读了potential solution,但无法弄清楚如何应用这个。MVC循环和依赖注入

有人能指点我一个解决方案吗?

在此先感谢。

回答

2

另一种解决方案是让您的IoC容器为您创建工厂,然后注入这些工厂,并使用示例MVP实现来查看此类似问题。具体视图需要演示者,但演示者需要一个IView(抽象)。它更像循环引用而不是依赖。

public interface IView 
{ 
    string Name { get; set; } 
} 

public interface IPresenterFactory<TController> 
{ 
    TController Create<TView>(TView view); 
} 

public class ConcreteView : IView 
{ 
    private Presenter _Presenter; 
    public ConcreteView(IPresenterFactory<Presenter> presenter) 
    { 
     this._Presenter = presenter.Create(this); 
    } 
} 

public class Presenter 
{ 
     public Presenter(IView view) 
     { 
     this._View = view; 
     } 
} 

演示工厂可以很容易地使用和包装您的IoC容器,然后根据需要生成您的工厂。单元测试也很容易,因为您可以非常轻松地创建一个IPresenterFactory模拟并构建您需要的Presenter或Controller。

1

一个解决方案,你已经找到自己,但你可能还没注意到:

在MVC中,视图发送事件控制器和控制器 发送这些事件到模型。该模型通过控制器将更改发送到视图 。

视图和模型可以发布事件(想象观察者模式)来通知控制器,这意味着您在模型和视图中都不存在对控制器的依赖关系。