Я пытаюсь создать метод, который может быть использован, как это:Пользовательские общий DTO Ассемблер
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
и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: Проблема в том, что у вас есть два метода с тем же именем и количеством параметров в одном классе. См. Обновление, он должен исправить эту проблему –