我正在尝试创建一种可以像这样使用的方法:
Assembler.CreateTransfer(i);
i
dynamic
是集合中的一个项目。i
是一个域对象。CreateTransfer()
应该返回一个i
+ Transfer 类型的实例(如果我的域对象是User
,那么它应该返回一个UserTransfer
.
至于我的模型是这样的:
public abstract class UserBase {
public long UserId { get; set; }
public string Username { get; set; }
}
public class UserTransfer : UserBase, ITransferObject { }
public partial class User : UserTransfer, IModelBase, IDomainObject {
public User() {
Roles = new List<Role>();
}
public virtual ICollection<Role> Roles { get; set; }
}
到目前为止,我已经完成了这个:
public static TTransfer CreateTransfer<TTransfer, TDomain>(TDomain d)
where TTransfer : ITransferObject
where TDomain : IDomainObject
{ ... }
- 这行得通,因为我知道
TTransfer
and的类型TDomain
。 - 我可以这样称呼它:
CreateTransfer<UserTransfer, User>(d)
.
当我尝试在不指定任何类型的情况下创建 dto 时出现问题:
CreateTransfer(d);
当然我已经为这个任务添加了一个重载,我希望我能神奇地完成以下任务:
public static ITransferObject CreateTransfer(IDomainObject d) {
// do magic
return CreateTransfer<transfer, domain>(d);
}
但在现实世界中,这是我所能得到的:
public static ITransferObject CreateTransfer(IDomainObject d) {
var dType = d.GetType();
var assemblyName = dType.Assembly.FullName;
var domainName = dType.FullName;
var transferName = domainName + "Transfer";
var domain = Activator.CreateInstance(assemblyName, domainName).UnWrap();
var transfer = Activator.CreateInstance(assemblyName, transferName).UnWrap();
return CreateTransfer< ?, ?>(d); // Problem
}
domain
和transfer
对象都被正确创建。
主要问题是:有什么办法可以打电话CreateTransfer<domain, transfer>(d)
吗?任何帮助将不胜感激。