假设如下:
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 :(得分:3)
你为什么不做一些像
这样的事情var item = mappers.Get<MyFunkyMapper>().GetSingle(...);
这假定Mapper<TTable, TDomain>
具有GetSingle<TDomain>(...)
方法。如果是这种情况,类型推断将找出GetSingle的泛型参数,即使你没有写它。
顺便说一下,您是否考虑过使用AutoMapper进行映射而不是自己动手?
答案 1 :(得分:1)
我想你不能。编译器可以通过查看函数的参数来推断类型参数,但就是这样。由于您没有传递任何参数,因此您将无法使用类型推断。
我可能建议的一个快捷方式是“using”关键字使用较少的功能。只需在文件顶部添加(在正常使用的旁边)这一行:
using TheMapper = MappingHelper<MyFunkyTable, MyFunkyMapper, MyFunkyDomainObject>;
然后在代码中
TheMapper.GetSingle();
如果文件访问一个或几个映射器,这个简写可以派上用场。
另一个想法 - 而不是MappingHelper
,为什么不在Mapper<T1, T2>
类中添加所有这些内容?然后你就可以使用
MyFunkyMapper.GetSingle();