locked
IModule constructor RRS feed

  • שאלה

  • היי

     

    שאלה ג'נרית:

    עובדות:

    1. ב- Class שמממש את IModule, ב- Constructor שלו אני יכול לשים כל מיני פרמטרים כגון: IUnityConatiner או IRegionManager, או לא משנה מה.

    2. ה- Constructor-ים נקראים אחד אחרי השני.

    3. המתודות initialize נקראות אחד אחרי השני.

     

    שאלות:

    1. האם כל פעם נוצר Instance חדש לפרמטרים אשר מועברים ב- Constructor-ים? או שכל פעם מועבר אותו Instance?

    2. אם כן, אז איך הם מתאחדים? כל מודול Initialize חדש שנקרא, ה- RegionManager יודע כבר על קיומו של הקודם.

    3. אם לא, אז איך הם נוצרים? אפשר להפוך את הפרמטרים ולשים באיזה סדר שאני רוצה וזה עדיין יעבוד.

     

    תודה

    יום חמישי 26 יולי 2012 10:19

תשובות

  • להוסיף למה שתומר כתב,

    1. הפרמטרים שנוצרים להזרקה לקונסטרקטורים (המינוח הטכני הוא Dependency Injection) יכולים להיווצר כל פעם מחדש, ויכולים להיווצר פעם אחת בלבד, על פי איך שהגדרת.

    הרכיב שאחראי על יצירתם וההזרקה שלהם נקרא IoCC או Inversion of Control Container. פריזם יכול לעבוד עם כל סוגי ה IOCC אבל בדר"כ עובדים עם unity או עם mef.

    ב bootstrapper ה IOCC מאותחל, ונרשמים כל הרכיבים שמאוחר יותר מוזרקים (אם כי הם יכולים להיווצר גם במקומות נוספים). ספיציפית השירותים שהזכרת - IRegionManager ו IUnityContainer שניהם נוצרים כסינגלטון.

    אתה יכול לראות באיזה IOCC אתה משתמש בפריזם - בדר"כ תשתמש ב BootStrapper שהשם שלו מצביע על ה IOCC שהוא משתמש בו - ז"א MefBootstrapper עבור MEF ו UnityBootstrapper עבוד Unity. אני אישית ממליץ על Unity אבל זה כבר נושא לדיון אחר.

    2. כאמור, הם סינגלטונים.

    3. זה עובד ע"י הקסם של IOCC. שווה לגגל Inversion of Control Container. אני אישית ממליץ לחפש Simple IOCC בגוגל בשביל לראות מימוש מאוד פשוט של זה.


    http://blogs.microsoft.co.il/blogs/eladkatz @ElatKt

    • סומן כתשובה על-ידי Shahar Eldad יום חמישי 26 יולי 2012 13:56
    יום חמישי 26 יולי 2012 13:23

כל התגובות

  • שחר, לא כל כך ברור משאלתך למה אתה מתכוון? יש לך שני מודולים?

    מודול, מחלקה שמממשת IModule, אמורה להווצר בטעינה, ואז ה- Ctor פועל פעם אחת בלבד, ואז Initialize.

    ניתן להגדיר תלויות בין מודולים, כך שאחד נטען רק אם האחר נטען לפניו.

    בד"כ יוצרים תלויות בין מודולים במקרים בהם מודול אחד מממש Service או מייצר Region משותף, שמודולים אחרים תלויים בו.

    Unity Container, ו- Region Manager הם שני שירותים שמייצרים אותם בעזרת ה- Bootstrapper כי הם תשתיתיים.

    לצורך העניין, אם אתה עובד עם Prism בקונפיגורציה של Unity, אזי המודולים נוצרים בעזרת Unity, ואז אפשר לבקש פרמטרים (תלויות) ב- Ctor. פרמטרים אלו יוזרקו כש-Unity ייצור את המודול. אבל לזה Prism דואגת.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    יום חמישי 26 יולי 2012 11:03
    מנחה דיון
  • להוסיף למה שתומר כתב,

    1. הפרמטרים שנוצרים להזרקה לקונסטרקטורים (המינוח הטכני הוא Dependency Injection) יכולים להיווצר כל פעם מחדש, ויכולים להיווצר פעם אחת בלבד, על פי איך שהגדרת.

    הרכיב שאחראי על יצירתם וההזרקה שלהם נקרא IoCC או Inversion of Control Container. פריזם יכול לעבוד עם כל סוגי ה IOCC אבל בדר"כ עובדים עם unity או עם mef.

    ב bootstrapper ה IOCC מאותחל, ונרשמים כל הרכיבים שמאוחר יותר מוזרקים (אם כי הם יכולים להיווצר גם במקומות נוספים). ספיציפית השירותים שהזכרת - IRegionManager ו IUnityContainer שניהם נוצרים כסינגלטון.

    אתה יכול לראות באיזה IOCC אתה משתמש בפריזם - בדר"כ תשתמש ב BootStrapper שהשם שלו מצביע על ה IOCC שהוא משתמש בו - ז"א MefBootstrapper עבור MEF ו UnityBootstrapper עבוד Unity. אני אישית ממליץ על Unity אבל זה כבר נושא לדיון אחר.

    2. כאמור, הם סינגלטונים.

    3. זה עובד ע"י הקסם של IOCC. שווה לגגל Inversion of Control Container. אני אישית ממליץ לחפש Simple IOCC בגוגל בשביל לראות מימוש מאוד פשוט של זה.


    http://blogs.microsoft.co.il/blogs/eladkatz @ElatKt

    • סומן כתשובה על-ידי Shahar Eldad יום חמישי 26 יולי 2012 13:56
    יום חמישי 26 יולי 2012 13:23
  • לאחר קריאה של חומרים נוספים וקריאה נוספת של התשובה שלך הבנתי

    תודה

    • נערך על-ידי Shahar Eldad יום חמישי 26 יולי 2012 13:57 תשובה למעיל הובנה
    יום חמישי 26 יולי 2012 13:30