Tags: , | Categories: IOC Posted by talgiladi on 3/4/2009 9:46 PM | Comments (0)

ראיתי את הפרוייקט הזה ב code plex שמיקל על השימוש בService Locator בצורה יותר Loosley Coupled. לאחר מה שקרה לי

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

מחלקות יצרתי שם עם כמה שורות קוד…

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

אז רק כדי להשלים את הפרוייקט שלהם נראה שצריך להוסיף 2 מתודות בממשק.  הראשונה:

 void RegisterType<TFrom, TTo>() where TTo : TFrom;

זאת שאמורה למפות ממשק למחלקה הדיפולטית שמיישמת אותו, והשניה:

void RegisterInstance<TType>(TType instance);

שתמפה אינסטס קיים של אובייקט שמממש את הממשק.

עכשיו אני יכול בנקודת הכניסה לאפליקציה (נניח ב global.asax) למפות את כל מה שאני רוצה בלי להיות תלוי במימוש מסוים.

Technorati Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Categories: IOC Posted by tal on 1/9/2009 1:20 PM | Comments (7)

לא היה כל כך טוב בפעם האחרונה…

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

בניתי לאשתי איזה אתר קטן, ולאחר מחשבות הגיע למסקנה שיתכן שהוא יגדל ונצטרך לשנות דברים אז כדאי להשתמש ב dependency injection. מכיוון שאני מכיר את StructureMap ודי אוהב לעבוד איתו אז כמובן שבחרתי בו.

טרחתי אפילו לבדוק באתר שלהם שאין בעיה להריץ על שרת אירוח משותף.

טוב, אז עשיתי כמה רפקטורים לקוד, בדרך שיניתי עוד כמה דברים,  העליתי לשרת, וקיבלתי את דף השגיאה… שיניתי בווב קונפיג כדי שיציג את השגיאה והתברר שהאסמבלי של StructureMap  לא יכול לעבוד בסביבה שלא מאפשרת הרשאות מלאות…

System.Security.SecurityException: That assembly does not allow partially trusted callers.

ניגשתי לגוגל, התברר שאני לא היחיד עם הבעיה, ניגשתי שוב לאתר שלהם כדי לבדוק שוב שאכן ניתן להריץ גם על שרת משותף ללא כל ההרשאות…

טוב, השארתי לבחור ההוא הודעה בבלוג אבל בינתיים אני בלי אפליקציה…

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

מצאתי את NInject, בדקתי שניתן להריץ על שרת משותף, הורדתי , מהר התאמתי את הקוד שלי, ו…

System.Runtime.CompilerServices.ExtensionAttribute' is defined in
multiple assemblies in the global alias; using definition from 'c:\xxx
\Ninject-1.0-release-net-2.0\Ninject.Core.dll

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

חזרה לגוגל, מצאתי משהו נחמד בשם Autofac, שוב בדקתי שניתן להריץ, הורדתי, התאמתי את הקוד, העליתי לשרת, ו… אכן עלה הדף הראשי!!!

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

אני עובד עם MVC, ואם אני מקבל הודעת שגיאה ש Action מצפה לפרמטר ID ולא קיבל אותו, ואני רואה בדיבאג שהפרמטר שם, משהו קצת מוזר…

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

ממשיך לרוץ באפליקציה, שוב שגיאה… שוב פרמטר חסר, שוב מתקן וחושב לעצמי, איזה מתכנת אתה…

ממשיך לרוץ, עכשיו ה UpdateModel מעדכן ערכים ריקים, לא זורק שגיאה, פשוט שם ערכים ריקים…

הראש כבר לא עובד טוב אז נפטרתי גם מ UpdateModel ועדכנתי ידנית…

וכך עוד דבר ועוד דבר…

עד שנפל האסימון!

זה לא אני! זה Autofac! איכשהו היא מצליחה לדפוק את הנתונים שמגיעים לקונטרולרים שלי!!

אולי לא הגדרתי לא טוב, אין לי מושג, זה גם לא כל כך משנה לי, פשוט זה לא אמור לקרות!! היא בסדר הכל אמורה לספק פרמטרים לקונסטרוקטור וליצור אובייקט, עובדה שזה עבר תקין עם StructureMap אצלי על המחשב!

החלטתי לבדוק את החשד שלי, הורדתי את Autofac  עבור קונטרולר אחד, ואכן! גם הפרמטרים מגיעים, גם ה UpdateModel חזר לעדכן ועוד כמה דברים מוזרים חזרו להיות תקינים!

מהר הורדתי את Autofac וחזרתי לשיטה הפרימיטיבית שבה הכל עבד!

לסיכום אין לי מה להגיד חוץ מהדברים הרגילים שתמיד אני אומר לעצמי- תכין גיבויים קבועים ולפני כל שינוי ולעשות בדיקת היתכנות לפני שימוש במשהו חדש…

בכל מקרה אני חושב StructureMap זה מוצר מעולה, מאוד נוח לעבוד איתו, הוא מהיר ויש בו די הרבה אפשרויות. גם Autofac נראה לי נחמד ממה שהספקתי לקרוא באותו הערב, למרות שלא יצא לעבוד איתו…

 

Technorati Profile

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5