zoukankan      html  css  js  c++  java
  • mojoportal学习笔记之IIndexableContent接口


     IIndexableContent接口如下:

    public interface IIndexableContent
        
    {

            
    event ContentChangedEventHandler ContentChanged;
            

        }

      这个接口定义了ContentChanged事件,本接口的作用定义了与索引有关的基础接口。

    委托ContentChangedEventHandler如下:

     public delegate void ContentChangedEventHandler(object sender, ContentChangedEventArgs e);

    ContentChangedEventArgs如下:

     public class ContentChangedEventArgs : EventArgs
        
    {
            
    private bool isDeleted = false;

            
    public bool IsDeleted
            
    {
                
    get return this.isDeleted; }
                
    set { isDeleted = value; }
            }


        }

    关于EventArgs 类,在网上查了些资料,如下:

    从代码你可以知道e是EventArgs类型的对象。那么你就该去看EventArgs类。   
      
    [Serializable]   
      
    public   class   EventArgs   
      
    {   
                  
    //   Methods   
                  static   EventArgs();   
                  
    public   EventArgs();   
        
                  
    //   Fields   
                  public   static   readonly   EventArgs   Empty;   
      }
       
          
      
    static   EventArgs()   
      
    {   
                  EventArgs.Empty   
    =   new   EventArgs();   
      }
       
        

      几乎什么也没做是吧?对,就是实例化了一个对象。不过我们可以继承这个基类,开发自己的MyEventArgs类,里面可以包含一些fields。主要用来触发事件的时候同时传递一些参数。当然你也可以不定义这么一个事件参数类,而是通过定一个包含长长的参数列表的委托来做,当然这样代码也就不美观了。


    -----------------------------------------------------------------------------------------------------------

    下面看继承IIndexableContent接口的类
    如:
    Blog类,简要分析一下:

    public class Blog : IIndexableContent
    {
        //继承了接口中事件的定义
         public event ContentChangedEventHandler ContentChanged;

        //触发事件方法的定义
         protected void OnContentChanged(ContentChangedEventArgs e)
            {
                if (ContentChanged != null)
                {
                    ContentChanged(this, e);
                }
            }


        //调用OnContentChanged方法的函数

        之一:

    private bool Create()
      {
       int newID = 0;
                blogGuid = Guid.NewGuid();
                createdUtc = DateTime.UtcNow;

       newID = DBBlog.AddBlog(
                    this.blogGuid,
                    this.moduleGuid,
        this.moduleID,
        this.userName,
        this.title,
        this.excerpt,
        this.description,
        this.startDate,
        this.isInNewsletter,
        this.includeInFeed,
                    this.allowCommentsForDays,
                    this.location,
                    this.userGuid,
                    this.createdUtc);

       this.itemID = newID;

                bool result = (newID > 0);

       //IndexHelper.IndexItem(this);
                if (result)
                {
                    ContentChangedEventArgs e = new ContentChangedEventArgs();
                    OnContentChanged(e);
                }

                return result;

      }


      之二:

     public bool Delete()
            {
                bool result = DBBlog.DeleteItemCategories(itemID);
                DBBlog.DeleteAllCommentsForBlog(itemID);
                DBBlog.UpdateCommentStats(this.moduleID);
                
               

                if (result)
                {
                    result = DBBlog.DeleteBlog(this.itemID);
                    DBBlog.UpdateEntryStats(this.moduleID);

                    ContentChangedEventArgs e = new ContentChangedEventArgs();
                    e.IsDeleted = true;
                    OnContentChanged(e);
                }

                return result;
            }

            我们看到在Delete方法中,ContentChangedEventArgs类的IsDeleted属性被赋值。
             即在Delete方法中,事件类型的IsDeleted属性为True


    --------------------------------------------------------------------------------------------

        
    在Blog类中,定义事件ContentChanged,这个事件是如何被调用的呢?

    在BlogEdit.CS中

    点击更新按钮时相关代码如下:

     
    IndexBuilderProvider indexBuilder = IndexBuilderManager.Providers["BlogIndexBuilderProvider"];
                    
    if (indexBuilder != null)
                    
    {
                        blog.ContentChanged 
    += new ContentChangedEventHandler(indexBuilder.ContentChangedHandler);
                    }



    删除时代码如下:

     Blog blog = new Blog(itemId);
                  
                    IndexBuilderProvider indexBuilder 
    = IndexBuilderManager.Providers["BlogIndexBuilderProvider"];
                    
    if (indexBuilder != null)
                    
    {
                        blog.ContentChanged 
    += new ContentChangedEventHandler(indexBuilder.ContentChangedHandler);
                    }

                    
                    blog.Delete();

    我们可以看到,在上面的代码中定义了ContentChanged事件触发时调用的方法。

    在blog.Delete()方法中会触发这个事件


    ---------------------------------------------------------------------------------------------------------
  • 相关阅读:
    武汉长途汽车票自动查询软件皱形(纯属练手)
    用gSOAP开发Web Service程序
    窗口的子类化与超类化
    Thunk技术
    Nokia 牵手 Windows Phone 7?
    数据库自动打包压缩工具,asp.net + ATL完美组合
    诺基亚宣布与微软达成战略合作
    DataBinder.Eval总结
    人际关系的55个绝招看完又发现,其实看不完
    .NET 中的对象序列化
  • 原文地址:https://www.cnblogs.com/wenjie/p/1166685.html
Copyright © 2011-2022 走看看