解耦视图,演示文稿和ASP.NET Web窗体

Joh*_*ren 6 c# asp.net mvp dependency-injection mef

我有一个ASP.NET Web窗体页面,演示者需要填充控件.这种交互对页面生命周期有点敏感,我想知道是否有一个技巧,我不知道.

我想要对整个事情保持实用,但不要牺牲可测试性.

目前我有这个:

public interface ISomeContract
{
    void InstantiateIn(System.Web.UI.Control container); 
}
Run Code Online (Sandbox Code Playgroud)

这个契约依赖于System.Web.UI.Control,我需要能够使用ASP.NET Web Forms编程模型.但是视图和演示者都不了解ASP.NET服务器控件.

我该如何解决这个问题?如何在我的具体视图中使用ASP.NET Web窗体编程模型而不在合同程序集中使用System.Web.UI.Control依赖项?

为了澄清一点,这种类型的界面都是关于UI组合(使用MEF).它在整个框架中是众所周知的,但它实际上只是从具体视图中调用.具体视图仍然是唯一知道ASP.NET Web窗体的东西.但是,这些公共方法InstantiateIn(System.Web.UI.Control)存在于我的合同程序集中,并且暗示了对ASP.NET Web窗体的依赖.

我一直在考虑一些双重调度机制甚至访问者模式来尝试解决这个问题,但我还不知道我想去哪个方向,我真的想对此事进行一些投入.

JNa*_*dal 0

将合约与 Web 控件解耦的一种方法是使用一个单独的编写器来处理从 ISomeContract 获取信息并将其放置在 Control 容器中。它可以驻留在引用协定程序集和 System.Web 的程序集中。