2009-12-11 5 views
1

Предположим следующее:Можно ли повторить эти общие ограничения более чистым способом?

public class MyFunkyTable : DbObject 
{ 
    // this class will be generated 
} 

public class MyFunkyDomainObject : DomainObject 
{ 
    // this class will be custom-made 
} 

public class MyFunkyMapper : Mapper<MyFunkyTable, MyFunkyDomainObject> 
{ 
    // this will be custom mapping code due to wired abstraction and ... "supercool" db-system 
} 

в целом мы следующее:

MappingHelper<MyFunkyTable, MyFunkyMapper, MyFunkyDomainObject>.GetSingle(...); 

бушель повторение общих ограничений немного в громоздких (MyFunkyMapper уже указывает дженерики ..)

Есть ли способ сделать что-то вроде:

MappingHelper<MyFunkyMapper>.GetSingle(..); 

редактировать:
Я уже придумал идею: использование методов расширения, но это не то, что я хочу ...

+0

Не могли бы вы расширить ... в вызове GetSingle? –

+0

Метод GetSingle имеет некоторые параметры - например. значение для соответствия первичного ключа, но не более того. я надеюсь, что вы имели в виду параметры, а не метод-тело –

ответ

3

Почему вы не просто делать что-то вроде

var item = mappers.Get<MyFunkyMapper>().GetSingle(...); 

Это предполагает, что Mapper<TTable, TDomain> имеет метод GetSingle<TDomain>(...). Если это так, введите вывод, чтобы определить общий аргумент GetSingle, даже если вы его не пишете.

BTW, вы считали, что используете для использования вместо AutoMapper вместо своих собственных?

+0

, это не так ... мы хотим, чтобы наши картографы отображались только для отображения, а не для какого-либо db-вызова (ни exclusiv для запрошенного экземпляра, ни для вывода базы -класс). и: для фанатов autoMapper (я тоже), я добавил примечание: это будет пользовательский код отображения из-за проводной абстракции и ... «supercool» db-system -> atm нет шансов для autoMapper .. sry –

+0

+1 для AutoMapper –

+0

@dittodhole: Я не уверен, что я понимаю проблему. Помогло бы нам переименовать метод GetSingle в MapSingle? –

1

Я думаю, вы не можете. Компилятор может вывести параметры типа, просмотрев аргументы функции, но это все. Поскольку вы не передаете никаких параметров, вы не сможете использовать вывод типа.

Я бы предположил, что это менее используемая функциональность ключевого слова «using». Просто добавьте в верхней части файла (рядом с нормальным использованием х) этой линии:

using TheMapper = MappingHelper<MyFunkyTable, MyFunkyMapper, MyFunkyDomainObject>; 

А затем в коде

TheMapper.GetSingle(); 

Это сокращение может пригодиться, если файл обращается один или несколько картографами ,

Другая идея - вместо MappingHelper, почему бы не добавить все эти вещи в класс Mapper<T1, T2>? Затем вы сможете использовать

MyFunkyMapper.GetSingle(); 
+0

, я еще не думал об псевдониме ... но это приведет к тому, что каждый файл, который использует mappingHelper, добавит такой псевдоним. почему я не хочу добавлять db-связь к конкретному картографу, имеет простую причину: обменная способность и избыточность –

Смежные вопросы