<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Visual Studio DSL 入門 11---為狀態機設計器添加規則

         上一節我們在設計器的顯示方面進行了完善,在這一節,我們將深入狀態機設計器的一些邏輯細節,給我們的設計器添加邏輯規則.為生成代碼做好準備.
         在開始之前,我們先看一下Transition的幾個屬性之間的關系: 
           1.編輯Event,Condition,Action屬性時,Label屬性能夠自動計算顯示,計算邏輯為Event [Condition] / Action 
           2.當修改屬性Label時,Event,Condition,Action的值也能夠對應自動更新.  
         我們使用Vs.net Dsl的規則來實現:
           1.在Dsl項目下新增CustomCode文件夾來存放我們的自定義的代碼,這是Dsl開發中的通用做法,Dsl再強大也不可能不一點代碼不用寫就能夠使滿足需求,一般情況下,無論是在開發Dsl還是在使用Dsl時,都需要結合生成的代碼和自定義代碼.在CustomCode文件夾下面新建文件夾Validation,用于存放手寫的自定義驗證類.
           2.在Validation文件夾下面添加類TransitionLabelRule.
           3.修改TransitionLabelRule繼承于ChangeRule,并使用RuleOn屬性標簽標識此規則應用到域關系Transition上面.

      隱藏行號 復制代碼
      1. using Microsoft.VisualStudio.Modeling;
        
      2. 
        
      3. namespace Company.LanguageSm
        
      4. {
        
      5.     [RuleOn(typeof(Transition))]
        
      6.     public sealed class TransitionLabelRule : ChangeRule
        
      7. {
        
      8.     }
        
      9. }
        
      10. 
        

             4.在規則類里面,我們需要實現ChangeRule唯一的一個方法ElementPropertyChanged(ElementPropertyChangedEventArgs e),從這個方法我們可以看出,當Transition的一些屬性發生變化時就會觸發這個規則,參數類型ElementPropertyChangedEventArgs,這個參數包含當前的模型元素ModelElement,編輯的屬性DomainProperty,原值OldValue,新值NewValue,我們只需要判斷當前的屬性,如果是以上的Event,Condition,Action,Lable時,修改后就計算其余的屬性.
         

      隱藏行號 復制代碼 ?
      1. public override void ElementPropertyChanged(ElementPropertyChangedEventArgs e)
        
      2.         {
        
      3.             Transition t = e.ModelElement as Transition;
        
      4. 
        
      5.             // Compute Label when Event changes
        
      6. if (e.DomainProperty.Id == Transition.EventDomainPropertyId)
        
      7.                 t.Label = ComputeSummary(e.NewValue as string, t.Condition, t.Action);
        
      8. 
        
      9.             // Compute Label when Condition changes
        
      10. else if (e.DomainProperty.Id == Transition.ConditionDomainPropertyId)
        
      11.                 t.Label = ComputeSummary(t.Event, e.NewValue as string, t.Action);
        
      12. 
        
      13.             // Compute Label when Action changes
        
      14. else if (e.DomainProperty.Id == Transition.ActionDomainPropertyId)
        
      15.                 t.Label = ComputeSummary(t.Event, t.Condition, e.NewValue as string);
        
      16. 
        
      17.             // Compute Event, Condition, Action when Label changes
        
      18. else if (e.DomainProperty.Id == Transition.LabelDomainPropertyId)
        
      19.                 ComputeProperties(e.NewValue as string, t);
        
      20. 
        
      21.         }
        

         ComputeSummary是我們的輔助方法,通過Event,Condition,Action三個值來計算Lable的值,ComputeProperties方法是由Lable的值來分別匹配出另外三個屬性的值.最后可以直接對域類的屬性進入賦值. 這兩個輔助方法就不在這里列出來了,在下載代碼里可以看到.(在這里其實是默認提交,整個規則事件就在一個事務中).
              5.重新運行項目,會發現,寫的規則沒有起作用,修改Transition的屬性時,也沒有跳到TransitionLabelRule的斷點里面來,這是怎么回事呢?這其實是和Vs.net dsl 的規則機制有關,我們還需要對這個Rule進行一下注冊, 在CustomCode下面添加LanguageSmDomainModel(GeneratedCode下面的DomainModel.tt生成的類)的一個partial類,在這里類的GetCustomDomainModelTypes方法里,添加我們的自定義的Rule的集合,這樣 vs.net在加載時,就會自動加載這個Rule,并添加到Rule集合中.
         

      隱藏行號 復制代碼 ?
      1. namespace Company.LanguageSm
        
      2. {
        
      3.     public partial class LanguageSmDomainModel
        
      4. {
        
      5.         protected override Type[] GetCustomDomainModelTypes()
        
      6.         {
        
      7.             return new Type[]{typeof(TransitionLabelRule),};
        
      8.         }
        
      9.     }
        
      10. }
        

             6.生成轉換所有模板,我們來測試一下我們的規則:
       ~7OF3)~R2I0MRM~5]Q1P_C2

       


      代碼下載

       

      參考資源
            1. Visual Stuido DSL 工具特定領域開發指南
            2. DSL Tools Lab     http://code.msdn.microsoft.com/DSLToolsLab  系列教程  [本系列的入門案例的主要參考]

      作者:孤獨俠客似水流年
      出處:http://lonely7345.cnblogs.com/
      本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

       

      posted @ 2010-03-04 23:12  孤獨俠客  閱讀(2275)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 九九视频热最新在线视频| 国产一区二区三区不卡视频| 亚洲精品日韩久久精品| 亚洲日韩中文字幕在线播放| 在线A毛片免费视频观看| 萨嘎县| 亚洲熟妇自偷自拍另亚洲| 色香欲天天影视综合网| 国产真人性做爰久久网站| 日韩中文字幕一区二区不卡| 97视频精品全国免费观看| 国产一区二区亚洲精品| 亚洲一区二区三区人妻天堂 | AV秘 无码一区二| 午夜性爽视频男人的天堂| 黄又色又污又爽又高潮| 亚洲成av人片无码迅雷下载| 久久SE精品一区精品二区| 久久综合97丁香色香蕉| 免费可以在线看a∨网站| 亚洲第一福利网站在线| 国产精品成人午夜久久| 一本色道久久加勒比综合 | 最近高清中文在线字幕在线观看| 亚洲国产在一区二区三区| 日韩av一区二区高清不卡| 免费A级毛片无码A∨蜜芽试看| 精品国产乱码久久久人妻| 成人做受120秒试看试看视频| 熟妇人妻一区二区三区四区| 亚洲国产成人综合自在线| 2021国产成人精品久久| 易门县| 永久免费无码av在线网站| 精品亚洲国产成人av制服| 永久免费av网站可以直接看的| 国产极品粉嫩学生一线天| 一区二区三区精品偷拍| 中文字幕乱码中文乱码毛片| 亚洲精品一二三中文字幕| 国产精品特级毛片一区二区三区|