
类图:
1. CurrentUser属性
private User _currentUser = null;
/// <summary>
/// The Current User Accessing the blog/data
/// </summary>
protected User CurrentUser
{
get{return _currentUser;}
}
/// <summary>
/// The Current User Accessing the blog/data
/// </summary>
protected User CurrentUser
{
get{return _currentUser;}
}
通过定义一个属性,来获得当前登录blog的用户信息。该属性为保护成员,只能被该类的子类使用。
用户信息放在一个User类中.所以WeblogBaseTemplatedWebControl类依赖于User类,如下图所示:
可不要小看这个User类,它可是一个庞大的类,包含了很多用户的信息,这个类将在另外一篇文章中专门进行讨论
2. 构造函数:
public WeblogBaseTemplatedWebControl():base()
{
_currentUser = CSContext.Current.User;
}
{
_currentUser = CSContext.Current.User;
}
在构造函数里对User对象赋值
这里用到了一个类CSContext:
CSContext是用来存储一次Request的相关数据的类,也是一个很大的类,这个类将在另外一篇文章中进行讨论。
问题:CSContext什么时候被赋值的?
3. ExternalSkinFileName属性
/// <summary>
/// Set Blogs as the directory for all Blog Controls
/// </summary>
protected override String ExternalSkinFileName
{
get
{
if (!Globals.IsNullorEmpty(SkinName))
return CreateExternalSkinFileName("Blogs", SkinName);
return CreateExternalSkinFileName("Blogs");
}
}
/// Set Blogs as the directory for all Blog Controls
/// </summary>
protected override String ExternalSkinFileName
{
get
{
if (!Globals.IsNullorEmpty(SkinName))
return CreateExternalSkinFileName("Blogs", SkinName);
return CreateExternalSkinFileName("Blogs");
}
}
这个属性是根据基类的SkinName属性产生完整的皮肤用户控件的路径,
调用的基类方法如下:
protected virtual string CreateExternalSkinFileName(string path)
{
return CreateExternalSkinFileName(path, "Skin-" + this.GetType().Name);
}
protected virtual string CreateExternalSkinFileName(string path, string name)
{
if(path != null && !path.EndsWith("/"))
path = path + "/";
return string.Format("{0}{1}.ascx",path,name);
}
{
return CreateExternalSkinFileName(path, "Skin-" + this.GetType().Name);
}
protected virtual string CreateExternalSkinFileName(string path, string name)
{
if(path != null && !path.EndsWith("/"))
path = path + "/";
return string.Format("{0}{1}.ascx",path,name);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架