Enums on client side of WCF Data Services

יום רביעי, מרץ 26, 2014

לאחרונה יצא לי להתעסק עם WCF Data Services – אחד הדברים שהציקו לי היה העבודה עם enum, אמנם החל מ – Entity Framework 6 יש תמיכה ב – enums במודל, אבל לא בעבודה עם DataServices, במידה והמודל יכיל Enum Type לא ניתן יהיה לבצע Add Service Reference. אחד הפתרונות שחשבתי לעשות הוא לכתוב בצד הלקוח קוד כמו זה: Code Snippet namespace DataCache.ServiceReference{    public partial class DegreeType    {        public EDegreeType EType        {            get            {                return (EDegreeType)this.Type;            }            set            {                this.Type = (int)value;            }        }    }    public enum EDegreeType    {                Before,                After    }} כך בצורה זו –...
3 תגובות

Reflection Demo

יום שישי, נובמבר 23, 2012

בפוסט זה נראה דוגמא לשימוש ב – Reflection, זה לא קוד אמיתי שנשתמש בו, אלא יותר כדי להבין ולראות איך עובדים עם Reflection. נניח שיש לנו כמה מחלקות של Logging ונרצה לקבל את היכולת לשנות דינמית את סוג ה – Logger שאיתו אנחנו עובדים, נוכל להשתמש ב – Reflection כדי לעשות זאת. יהיה לנו Interface שיגדיר מהו Logger public interface ILogger {...
תגיות: ,
תגובה אחת

How do I get the current Item Template Name

יום שבת, נובמבר 3, 2012

כתבתי כיצד לקבל את סוג הפרוייקט האחרון שנוצר, כפי שתיארתי זה נשמר ב – Registry. מעבר לסוג הפרוייקט, לפעמים נרצה לדעת גם מה סוג ה – Item האחרון שנוצר, זהו מידע שלא נשמר ב – Registry אלא בזיכרון של Visual  Studio. לצערי לא מצאתי בעזרת המחלקה ProjectItem את ה – Template של אותו Item, והייתי חייב להשתמש ב – Reflection כדי למצוא את הנתון. ראשית נצטרך לקבל את אובייקט מסוג IVsSolution2. ServiceProvider...
אין תגובות

Attribute Reflection and Enums

יום ראשון, ספטמבר 23, 2012

כתבתי בעבר הסבר בסיסי לשימוש ב – attributes, בפוסט זה נראה דוגמא קצת יותר אמיתית בשיתוף עם enum. זה משהו שהציק לי רבות, נניח שיש לנו enum כלשהו עם ערכים, למשל ה – enum הבא:     public enum ToolWindow {     CallStack,     ClassDetails, ...
תגיות: , , , ,
אין תגובות

because it is registered in web.config and lives in the same directory as the page

יום שני, ינואר 3, 2011

הוספה של User Control לעמוד. במידה ואתם עובדים עם User Controls יש שתי דרכים להשתמש בהם בדפי ה - aspx שלנו.   דרך אחת להוסיף שורת Register בתחילת העמוד:   <%@ Register src="~/UserControl.ascx" tagname="UserControl" tagprefix="uc1" %> דרך נוספת היא לרשום את ה - UserControl בקובץ ה - web.config, כך:     <system.web>   <pages>     <controls>       <add src="~/UserControl.ascx" tagName="UserControl" tagPrefix="uc1"/>     </controls>   </pages> </system.web>   אני מעדיף את הדרך השנייה, מכיוון שזה חוסך לי להוסיף Register לכל עמוד.   הבעייה: יש בעייה מוזרה במידה ורושמים את ה - UserControl בקובץ הקונפיג, וגם ה - User Control וקובץ הקונפיג נמצאים באותה תיקייה (כלומר ב - root) נקבל את השגיאה הבאה: (בהנחה של - UserControl קוראים...
2 תגובות

Adding a Web reference dynamically at Runtime And Invoke the methods

יום חמישי, מאי 13, 2010

כיצד ניתן להפעיל מתודות של WebService שה - Proxy שלו נוצר בזמן ריצה.     בפוסט הקודם הראיתי שני דרכים לעבוד עם WebService שיש לנו את הכתובת שלו רק בזמן ריצה.   קבלתי שאלה במייל כיצד ניתן לקבל את רשימת המתודות שלו ולהפעיל אותם.   התשובה היא כמובן בעזרת reflection. ואני אדגים כאן איך עושים את זה.     את דוגמת הקוד ניתן להוריד כאן. הפתרון של בניית ה - WebService בצורה דינמית מתבסס על התשובה כאן     נתחיל: נגדיר מחלקה בשם WsProxy. ויהיו בו המתודות הבאות:   GetWebService Methods GetPartameters Inovke   נעבור על המתודות. GetWebService תפקידה לקבל את הכתובת של ה - WevService וליצור proxy בזמן ריצה   internal static object GetWebService(string webServiceAsmxUrl, string serviceName) {     WebClient client =...
2 תגובות

Adding a Web reference dynamically at Runtime

יום שני, מאי 10, 2010

  כיצד ניתן לקבל מידע מרחוק בצורה דינמית - (כלומר בלי לעשות Add Web Reference בזמן הפיתוח.)   (אפשר להוריד את דוגמת הקוד מכאן)   נניח את המקרה הבא: אתם מפתחים אתר שיודע להציג סרטונים עבור חברות ואותם חברות מעוניינות להגדיר בצורה דינמית אלו פרסומות יוצגו לפני ואחרי הסרטון.   פתרון ראשון: נשמור בבסיס הנתונים כתובת של Web Service שתחזיר רשימה של מחרוזות (עם שמות הפרסומות)   בעייה: איך נפנה ל - Web Service בלי שאנחנו מכירים אותו מראש בזמן הפיתוח ? הרי בדרך כלל אנחנו מוסיפים Reference ומקבלים proxy שאנחנו עובדים איתו, מה נעשה במקרה שאנחנו לא יודעים מה הכתובת.     שני פתרונות. אחד מה שמוצע כאן שזה יצירה של ה - Proxy בצורה...
4 תגובות

Disposable Property

יום שלישי, פברואר 9, 2010

  עדי הראה לי רעיון מאוד מעניין למימוש שמירת אובייקט זמני בזיכרון. למה הכוונה ?   נניח שיש לנו קוד כזה   public class FileLogger : ILogger { } public class MockLogger : ILogger { }   public class Person {     public ILogger Logger { get; set; } }   ויש לנו את פונקצייה שמקבלת כפרמטר Person אבל בחלק מהקוד של הפונקצייה לא רוצים שה - Logger יהיה FileLogger אלא MokeLogger - מן הסתם נעשה קוד כזה   public void Func(Person person) {     ILogger original = person.Logger;     person.Logger = new MockLogger();       //work.....       person.Logger = original;   }   מה שעדי הציע - זה לעשות את הקוד הבא   using (DisposableProperty<ILogger>.Set(person, new MockLogger())) {     // work..     }   וכעת באורח פלא בתוך בלוג ה - using ה -...
4 תגובות

שיעור על Attribute ושימוש ב – Reflection

יום שישי, דצמבר 4, 2009

  את הדוגמא ניתן להוריד מכאן:   יצא לי בזמן האחרון להסביר כמה פעמים את המושג Attribute - ולכן חשבתי לכתוב פוסט שיסביר את המושג למי שנכנס לעולם התכנות.   כשאנחנו כותבים מחלקות בדרך כלל יש לנו מאפיינים - המאפיינים הם בעצם מידע ששייך למופע של המחלקה, לדוגמא: public class Person {     public int Id { get; set; }     public string Name { get; set; } }   הגדרנו מחלקה עם שני מאפיינים, מספר ושם, המשמעות של אותם מאפיינים שכשיהיה לנו מופעים של Person, לכל מופע יש את השם שלו והמזהה שלו.   לפעמים אנחנו רוצים להגדיר התנהגות לאובייקטים שלנו - כלומר אנחנו רוצים להגדיר איך האובייקטים יתנהגו במצבים מסויימים, והמידע...
תגיות: , , ,
8 תגובות

UnmanagedMemoryStream and PinnedBufferMemoryStream

יום ראשון, יולי 12, 2009

  יש class מעניין בשם UnmanagedMemoryStream, התפקיד שלו בחיים זה לספק גישה לבלוקים בזיכרון קוד שאינו מנוהל. בדוגמא ב - MSDN יש את דוגמת הקוד הבאה: (שם זה מופיע עם הערות)   unsafe {     byte message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");     IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);     byte* memBytePtr = (byte*)memIntPtr.ToPointer();       UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length,                                                                     message.Length, FileAccess.Write);     writeStream.Write(message, 0, message.Length);     writeStream.Close();       UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length,                                                                 message.Length, FileAccess.Read);     byte...
תגיות: , , ,
3 תגובות