0
我試圖創造出可以這樣使用方法:自定義泛型DTO彙編
Assembler.CreateTransfer(i);
i
是dynamic
集內的項目。i
是一個域對象。 。CreateTransfer()
應該返回i
型+轉移的一個實例(如果我的域對象是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
和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)
?任何幫助將不勝感激。
+1謝謝丹尼爾,但不幸的是,這並沒有奏效,它引發了一個抱怨模棱兩可的例外。暫時我主動調用'CreateTransfer(domainObject)'。 –
Esteban
@Esteban:問題是你有兩個方法在同一個類中具有相同的名字和參數個數。請參閱更新,它應該解決這個問題 –