BlogEngine.NET (一)配置

因为日志的配置信息比较多,而且可能每个人的配置都不相同,所以BlogEngine.NET中的 配置信息需要统一管理,日志结构图如下:

BlogBasePage类是个抽象类,是其他web页面的基类,它会使用BlogSettings获得配置信息,代码如下:

public   abstract   class  BlogBasePage : System.Web.UI.Page
  
{

    
private string _Theme = BlogSettings.Instance.Theme;
    
/// <summary>
    
/// Assignes the selected theme to the pages.
    
/// </summary>

    protected override void OnPreInit(EventArgs e)
    
{
      
if (Request.QueryString["theme"!= null)
        _Theme 
= Request.QueryString["theme"];

      MasterPageFile 
= "~/themes/" + _Theme + "/site.master";

      
base.OnPreInit(e);

      
if (!Page.IsPostBack && !string.IsNullOrEmpty(Request.QueryString["deletepost"]))
      
{
        
if (Page.User.Identity.IsAuthenticated)
        
{
          Post post 
= BlogEngine.Core.Post.GetPost(new Guid(Request.QueryString["deletepost"]));
          post.Delete();
          post.Save();
          Response.Redirect(
"~/");
        }

      }

    }

}

BlogSettings中使用单件模式:

  public   static  BlogSettings Instance
    
{
      
get
      
{
        
if (blogSettingsSingleton == null)
        
{
          blogSettingsSingleton 
= new BlogSettings();
        }

        
return blogSettingsSingleton;
      }

    }

在BlogSettings的私有构造函数中调用了 Load();方法,这个方法使用BlogService类获得配置信息,使用反射技术给BlogSettings实例对象中的属性赋值

  private   void  Load()
    
{
      Type settingsType 
= this.GetType();

      
//------------------------------------------------------------
      
//    Enumerate through individual settings nodes
      
//------------------------------------------------------------
      System.Collections.Specialized.StringDictionary dic = Providers.BlogService.LoadSettings();
      
foreach (string key in dic.Keys)
      
{
        
//------------------------------------------------------------
        
//    Extract the setting's name/value pair
        
//------------------------------------------------------------
        string name = key;
        
string value = dic[key];

        
//------------------------------------------------------------
        
//    Enumerate through public properties of this instance
        
//------------------------------------------------------------
        foreach (PropertyInfo propertyInformation in settingsType.GetProperties())
        
{
          
//------------------------------------------------------------
          
//    Determine if configured setting matches current setting based on name
          
//------------------------------------------------------------
          if (propertyInformation.Name.Equals(name, StringComparison.OrdinalIgnoreCase))
          
{
            
//------------------------------------------------------------
            
//    Attempt to apply configured setting
            
//------------------------------------------------------------
            try
            
{
              propertyInformation.SetValue(
this, Convert.ChangeType(value, propertyInformation.PropertyType, CultureInfo.CurrentCulture), null);
            }

            
catch
            
{
              
// TODO: Log exception to a common logging framework?
            }

            
break;
          }

        }

      }

    }

BlogService通过读取webconfig中的section同时利用反射技术获得provider的具体类

private   static   void  LoadProviders()
        
{
            
// Avoid claiming lock if providers are already loaded
            if (_provider == null)
            
{
                
lock (_lock)
                
{
                    
// Do this again to make sure _provider is still null
                    if (_provider == null)
                    
{
                        
// Get a reference to the <blogProvider> section
                        BlogProviderSection section = (BlogProviderSection)WebConfigurationManager.GetSection("BlogEngine/blogProvider");

                        
// Load registered providers and point _provider
                        
// to the default provider
                        _providers = new BlogProviderCollection();
                        ProvidersHelper.InstantiateProviders(section.Providers, _providers, 
typeof(BlogProvider));
                        _provider 
= _providers[section.DefaultProvider];

                        
if (_provider == null)
                            
throw new ProviderException("Unable to load default BlogProvider");
                    }

                }

            }

        }

webconfig中的相关信息为

< configSections >
    
< sectionGroup name = " BlogEngine " >
      
< section name = " blogProvider "  requirePermission = " false "  type = " BlogEngine.Core.Providers.BlogProviderSection, BlogEngine.Core "  allowDefinition = " MachineToApplication "  restartOnExternalChanges = " true " />
    
</ sectionGroup >
  
</ configSections >

  
< BlogEngine >
    
< blogProvider defaultProvider = " XmlBlogProvider " >
      
< providers >
        
< add name = " XmlBlogProvider "  type = " BlogEngine.Core.Providers.XmlBlogProvider " />
        
< add name = " MSSQLBlogProvider "  type = " BlogEngine.Core.Providers.MSSQLBlogProvider " />
      
</ providers >
    
</ blogProvider >
  
</ BlogEngine >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值