C# 页面、web服务和web控件的通用继承
我有一套功能,我想在我的c#.NET3.5Web项目中为我的网页和用户控件提供这些功能。我对页面的标准方法是创建一个扩展System.Web.UI.page类的“基本页面”,然后让我的页面从此类继承,而不是直接从page类继承 现在,我想向我的web控件(ascx)和web服务公开其中一些函数。我可以想出很多方法来做到这一点,但他们似乎有点笨拙,我想我错过了一个技巧 是否有一种简单的方法可以使用继承为我的页面、web服务和控件提供一些通用函数,或者是否需要将这些函数封装在一个所有函数都可以访问的类中 举例说明:C# 页面、web服务和web控件的通用继承,c#,.net,asp.net,C#,.net,Asp.net,我有一套功能,我想在我的c#.NET3.5Web项目中为我的网页和用户控件提供这些功能。我对页面的标准方法是创建一个扩展System.Web.UI.page类的“基本页面”,然后让我的页面从此类继承,而不是直接从page类继承 现在,我想向我的web控件(ascx)和web服务公开其中一些函数。我可以想出很多方法来做到这一点,但他们似乎有点笨拙,我想我错过了一个技巧 是否有一种简单的方法可以使用继承为我的页面、web服务和控件提供一些通用函数,或者是否需要将这些函数封装在一个所有函数都可以访问的
- 我有一个处理web应用程序大部分功能的单例程序
- 在每个请求开始时,我希望检查该类是否存在于web缓存中,如果不存在,则对其进行初始化
这很管用,但看起来很笨拙……我期待你们用你们的智慧让我谦卑 听起来像是面向方面编程的例子。NET对此装备不足。恐怕你的解决方案是最好的
或者,您可以将所有或部分函数移动到一个静态类/单例,然后从您的aspx/ascx/asmx使用该类?继承的方式不多,但至少减少了代码重复。我的解决方案是将我想要共享的所有方法和函数都放在我的基本母版页类中。然后,我在用户控件基类中为每个方法和函数设置一个等价项,如下所示:
//Property in masterpage base
public string QsSearchTerm
{
get
{
if (!String.IsNullOrEmpty(Request.QueryString["q"]))
{
return Helpers.SanitiseString(Server.UrlDecode(Request.QueryString["q"]));
}
return String.Empty;
}
}
//Property in usercontrol base
public string QsSearchTerm
{
get
{
if (Page.Master is BaseMasterPage)
{
return ((BaseMasterPage)Page.Master).QsSearchTerm;
}
return string.Empty;
}
}
这没有帮助的是您对web服务基类的代码重复。我认为,将上述内容重构成一个具有接受HttpContext实例的构造函数的类将是前进的方向。然后,可以在基本web服务、母版页、用户控件、页面等中公开此类的单例实例
希望这能有所帮助,但我也很想知道是否有更好的方法。在您的Singleton中,您可以提供一个策略界面,允许根据配置的环境更改代码。这将允许您在web/windows/wcf…等之间切换。我认为使用基本页面是正确的方法 我有多个基本页和自定义用户控件,根据当前页使用的基本页不同,它们的加载方式也不同 在自定义用户控件中,可以使用以下内容:
if (this.Page is BasePageName)
{
BasePageName bp = (BasePageName)this.Page;
bp.BasePageFunction();
}
不,您可以在自定义用户控件中使用重复代码,只需从基本页调用它
根据页面功能和需要,您还可以拥有继承的基本页面的层次结构。BasePageName 2:BasePageName这都是明智的建议。就我所知,没有一个我不知道的“通用”解决方案可以解决这个问题。谢谢大家的意见。