בהמשך לפעם שעברה,
הפעם נדבר טיפה יותר על מה היינו רוצים מProxy שאנחנו מממשים:
כאמור – כאשר אני אומר Proxy, אני מתכוון למימוש של ממשק שמקיים שכל המתודות פונות בסופו של דבר למתודה ספציפית.
היינו מצפים שלמתודה הזאת נקבל את המידע הבא:
- המתודה שהופעלה – אבל אנחנו רוצים יותר מאת השם, אלא את הOverload המתאים שנקרא. כלומר, כנראה את הMethodInfo של המתודה המתאימה שהופעלה.
- הפרמטרים שאיתם נקראה המתודה – מדובר במבנה המכיל את הפרמטרים שנשלחו למתודה. ניתן לשלוח את זה בתור מיפוי כלשהו, או בתור מערך שאליו ניגש לפי הסדר של הפרמטרים בMethodInfo כדי למצוא פרמטר ספציפי.
- בנוסף, היינו מצפים לקבל את הפרמטרים הגנריים של המתודה, אם יש כאלה. אותם אנחנו יכולים לקבל גם בתוך הMethodInfo בהנחה שקראו לMakeGenericType.
בנוסף, היינו מצפים ליכולות הבאות:
- לקבוע את ערך ההחזר של המתודה שהופעלה
- לשנות את הפרמטרים שהם ref או out
- לזרוק Exception ביציאה מהפונקציה
בכל מקרה, היינו מצפים שהפונקציה שאליה שאר הפונקציות עושות Proxy תקבל איזה ממשק שמספק פונקציונאליות כזאת.
יש כמה מימושים כאלה, ביניהם:
- MethodCall שנמצא בRemoting
- IInvocation שנמצא בOpen Source בשם DynamicProxy של Castle
בפעמים הבאות נמשיך לדבר על Proxyים ובהמשך נראה את השימושים שהבטחתי
המשך יום מיופה כוח טוב.