В примере
http://bltoolkit.net/doc/Reflection/ObjectFactory.htm показано, как использовать ObjectFactory в случае с рукописным запросом.
А было бы очень здорово, если-бы можно было сделать как-то так:
[ObjectFactory(typeof(Person.ObjectFactory), "PersonType")]
public class Person
{
[MapField("PersonID")]
public int ID;
public string LastName;
public string FirstName;
public string MiddleName;
class ObjectFactory : IObjectFactory
{
public object CreateInstance(TypeAccessor typeAccessor, InitContext context, string selectorFieldName)
{
// Get the object type indicator field.
//
object objectType = context.DataSource.GetValue(context.SourceObject, selectorFieldName);
// Target ObjectMapper must be changed in order to provide correct mapping.
//
switch ((string)objectType)
{
case "D": context.ObjectMapper = ObjectMapper<Doctor>. Instance; break;
case "P": context.ObjectMapper = ObjectMapper<Patient>.Instance; break;
}
// Create an object instance.
// Do not call ObjectMapper.CreateInstance as it will lead to infinite recursion.
//
return context.ObjectMapper.TypeAccessor.CreateInstance(context);
}
}
}
что бы можно было делать так:
List<Person> list = new SqlQuery(db)<Person>.SelectAll();
А то ради того, чтобы запросить из вьюшки подобные данные, приходится либо руками запрос писать, чтобы в него нужное поле попало, либо проперти PersonType в класс добавлять, которае там нафиг не сдалось.