基于组件(或复合)的Web应用程序的OpenRasta框架

| 我们正在尝试构建一个松散耦合的基于复合的Web应用程序,并研究各种选项和框架。 这个想法就像当用户浏览到页面时,uri将在服务器上解析为资源以及根据配置采取的操作列表。 该视图将由一些html标记和一些基于其他URI内容的组件组成。这些组件是可重用的,并且彼此之间不应有任何想法(可能是上下文)。 这只是一个主意,想了解OpenRasta框架如何对此有所帮助。我可能对这种方法完全错了。也许可以使用当前的asp.net Webform和mvc框架轻松完成此操作,但是我想听听您的意见。     
已邀请:
我刚刚完成了一个OpenRasta网站,该网站依赖于我注入到视图中的标准Web控件,并传递强类型的Resource(由OR通过处理程序提供)以使控件能够以通常的方式显示资源属性等。 资源实例带有要加载和注入的控件的路径(Resource.ControlPath)。通过将URI的各个方面串联起来以找到控件,可以在处理程序中进行设置。这允许不同的URI请求位于站点文件层次结构中不同位置的同一控件的不同版本。 因此,例如,ClientA需要具有许多特定于客户的文本和功能的介绍视图。 ClientB还需要一个具有不同内容和功能的简介页。 这给出了两个URI / myapp / clienta / intro / myapp / clientb / intro 组态
ResourceSpace.Has.ResourcesOfType<IntroResource>()
        .AtUri(\"/myapp/{client}/intro\")
        .HandledBy<IntroHandler>()
        .RenderedByAspx(\"~/Views/IntroView.aspx\");
IntroHandler.cs
public class IntroHandler
{
    public OperationResult Get(string client)
    {
        var controlPath = ClientService.GetIntroControlPath(client);
        if (controlPath.IsEmpty()) return new OperationResult.NotFound();
        return new OperationResult.OK{
             ResponseResource = new IntroResource{
                              ControlPath = controlPath,
                              Client=client
                            }
          };
        }
    }
}
Intro.aspx
<%@ Page Language=\"C#\" Inherits=\"OpenRasta.Codecs.WebForms.ResourceView<xx.IntroResource>\" MasterPageFile=\"~/Views/View.Master\" %>

<asp:Content ContentPlaceHolderID=\"head\" ID=\"head\" runat=\"server\">
    <link href=\"/assets/CSS/intro.css\" rel=\"stylesheet\" type=\"text/css\" />
    <%
        var userControl = Page.LoadControl(Resource.ControlPath) as UserControl;
        if (userControl == null) return;

        var property = userControl.GetType().GetProperty(\"Resource\");
        if (property == null) return;

        property.SetValue(userControl, Resource, null);
        IntroContentControlHolder.Controls.Add(userControl);
    %>
</asp:Content>
<asp:Content ContentPlaceHolderID=\"body\" ID=\"content\" runat=\"server\">
    <asp:placeholder runat=\"server\" id=\"IntroContentControlHolder\"></asp:placeholder>
</asp:Content>
简介
<%@ Control CodeBehind=\"intro.ascx.cs\" Language=\"C#\" Inherits=\"xxxx.intro\"%>

 <h1>Welcome <%=Resource.Client%></h1> 

...Lots more UI stuff
Intro.ascx.cs
public class intro : UserControl
{
    public IntroResource Resource { get; set; }
}
因此,简介控件的每个版本都使用客户端特定的功能扩展了View。     

要回复问题请先登录注册