none
שמות פרמטרים ב IInterceptionBehavior של Unity RRS feed

  • שאלה

  • שלום,

    אני משתמש ב-Unity כ-IoC Container וב-Extension ה-Interception שלו.

    כשאני מממש את IInterceptionBehavior אני מקבל במתודת ה-Invoke את IMethodInvocation input,

    ראיתי שניתן להוציא ממנו את שם המתודה שנקראה ואת ערכי הפרמטרים,

    האם ניתן להוציא מ-input גם את שמות הפרמטרים?

    תודה,

    אורון

    יום רביעי 04 דצמבר 2013 18:44

תשובות

  • מצאתי (:

    public IMethodReturn Invoke( input, GetNextInterceptionBehaviorDelegate getNext)
            {IMethodInvocation
                // before invocation
    
                var paras = input.Arguments;
    
                for (int i = 0; i < paras.Count; i++)
                {
                    Console.Write(paras.ParameterName(i) + ": ");
                    Console.WriteLine(paras[i].ToString()
                        );
                }
    
                _logger.Log("Logging service call...");
    
                // invoking
                var result = getNext()(input, getNext);
    
                _logger.Log("Service call ended successfully!");
    
                return result;
    
            }



    • סומן כתשובה על-ידי oronbz יום רביעי 04 דצמבר 2013 21:04
    • נערך על-ידי oronbz יום חמישי 05 דצמבר 2013 05:51 casting is not needed
    יום רביעי 04 דצמבר 2013 20:58

כל התגובות

  • מצאתי (:

    public IMethodReturn Invoke( input, GetNextInterceptionBehaviorDelegate getNext)
            {IMethodInvocation
                // before invocation
    
                var paras = input.Arguments;
    
                for (int i = 0; i < paras.Count; i++)
                {
                    Console.Write(paras.ParameterName(i) + ": ");
                    Console.WriteLine(paras[i].ToString()
                        );
                }
    
                _logger.Log("Logging service call...");
    
                // invoking
                var result = getNext()(input, getNext);
    
                _logger.Log("Service call ended successfully!");
    
                return result;
    
            }



    • סומן כתשובה על-ידי oronbz יום רביעי 04 דצמבר 2013 21:04
    • נערך על-ידי oronbz יום חמישי 05 דצמבר 2013 05:51 casting is not needed
    יום רביעי 04 דצמבר 2013 20:58
  • כל הכבוד על הצגת הפיתרון, זה בט יוכל לעזור לבאים שיתקלו בבעיה דומה ויחפשו פתרון בעזרת וגל או כאן בפורום :-)

    אורון, נקודה קטנה אם אפשר להעיר לעתיד. קודים אנא לשים בתוך בלוק של קוד. בכפתורים למעךה שעורך יש כפתור מיוחד עבור קוד. לא רק שהוא מצמיד את הקוד לשמאל אלא מה שטוב בו זה שאם בוחרים את השפה הנכונה מהרשימה אז הקוד מקבל צבעים יפים כמו ב visual studio ואז קל אמוד לקרוא אותו. לא עברתי על הקוד שלך אבל הנה ככה הוא ניראה כשאני מכניס אותו לבלוק של קוד בפורום:

    בהחלט מגיע הצבעה על הודעה מועילה :-)

    * אני דוגל בכמה שיותר הצבעות (כמובן לא על סתם הודעות אבל כל דבר שיכול להועיל) ואני ממליץ לכולם לפעול ככה. לא עולה לכם להצביע לאחרים ואין מגבלה על מספר הצבעות. אז מה איכפת לנו שאנשים יזכו בנקודות וירגישו טוב בצדק על כך שהם עזרו למישהו :-)

    public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
            {
                // before invocation
    
                var paras = (ParameterCollection)input.Arguments;
    
                for (int i = 0; i < paras.Count; i++)
                {
                    Console.Write(paras.ParameterName(i) + ": ");
                    Console.WriteLine(paras[i].ToString()
                        );
                }
    
                _logger.Log("Logging service call...");
    
                // invoking
                var result = getNext()(input, getNext);
    
                _logger.Log("Service call ended successfully!");
    
                return result;
    
            }

    ניראה יותר טוב :-)


    [Personal Site] [Blog] [Facebook]signature

    יום רביעי 04 דצמבר 2013 21:37
    מנחה דיון
  • סידרתי את הקוד לפי עצתך,

    רק חשוב לציין, הפתרון לא נמצא בגוגל, חפירות במחלקות עזרו (:

    וגם בדוקמונטציה של Unity רשום שהם מספקים רק את שם המתודה וערכי הפרמטרים.

    • נערך על-ידי oronbz יום רביעי 04 דצמבר 2013 21:44
    יום רביעי 04 דצמבר 2013 21:41