wiennat

Attribute

เรตติ้ง
เขียนโดย Wiennat - asp.net, Silverlight, .NET, ASP.NET Ajax, asp.net futures, ASP.NET MVC เมื่อวันที่ 22 April 2008 ตอน 12:25

จาก Castle Active Record ทั้ง สอง ตอน ทำให้มานึกๆเอาแล้วก็สงสัยว่า ตอนที่ Initialize ตัว ActiveRecord ทำไมต้องมาใส่ข้อมูลของ Type ที่เราจะใช้ด้วยทั้งๆที่่เราก็ระบุ Attribute ActiveRecord ให้กับคลาสอยู่แล้ว ตอนนั้นก็เลยคิดขึ้นมาได้ว่าถ้าใช้ Reflection เข้ามาช่วยก็น่าจะใช้ได้นี่

    Assembly a = Assembly.GetExecutingAssembly();
    Type[] allTypes = a.GetTypes();
    List<Type> selectedType = new List<Type>();
    foreach (Type t in allTypes)
    {
        if (t.GetCustomAttributes(typeof(ActiveRecordAttribute), false) != null)
        {
            selectedType.Add(t);
        }
    }

    ActiveRecordStarter.Initialize(source, selectedType.ToArray());

คือตอนแรกเราก็จัดการดึง Type ทั้งหมดที่อยู่ใน Assembly ขึ้นมาก่อน แล้วก็เลือกเฉาพะที่แปะ Attribute ActiveRecord ขึ้นมาแล้วก็ส่งไปตอน initilize ก็เรียบร้อย

แต่ อ้ะๆๆๆ ยังก่อน

ถ้าเราดูโอเวอร์โหลดของ ActiveRecordStarter.Initialize เราก็จะเห็นว่ามันมีโอเวอร์โหลดที่รับ assembly เข้าไปเหมือนกันดังนั้นก็เลยแก้เป็น

    ActiveRecordStarter.Initialize(Assembly.GetExecutingAssembly(), source);

ง่ายกว่าแยะเลยแฮะ

ยังไงก็ตาม ถ้าเกิดมี type เป็นจำนวนมากแถมส่วนใหญ่ก็ไม่ใช่ type ของ activerecord ล่ะก็ ใส่เพิ่มเองแบบเดิมหรือไม่ก็แยก type เหล่านั้นออกไป assembly อื่น น่าจะให้ผลลัพธ์ที่ดีกว่านะ

Read the complete post at http://onedd.net/2008/04/22/405-attribute

Filed under: , ,