У меня определены следующие интерфейсы:
public interface IAudit {
DateTime DateCreated { get; set; }
}
public interface IAuditable {
IAudit Audit { get; set; }
}
Интерфейс IAuditable
говорит, для каких классов у меня будет Audit
. Интерфейс IAudit
является фактическим Audit
для этого класса. Например, у меня есть следующие реализации:
public class User : IAuditable {
public string UserName { get; set; }
public UserAudit Audit { get; set; }
}
public class UserAudit : IAudit {
public string UserName { get; set; }
public DateTime DateCreated { get; set; }
public UserAdit(User user) {
UserName = user.UserName;
}
}
Теперь, учитывая объект, который является IAuditable
( Пользователь
сверху), я хотел бы создать экземпляр ] IAudit
(UserAdit сверху) путем подачи объекта IAuditable
в конструктор. В идеале у меня должно быть что-то вроде:
if (myObject is IAuditable) {
var audit = new IAudit(myObject) { DateCreated = DateTime.UtcNow }; // This would create a UserAudit using the above example
}
Однако у меня куча проблем:
IAudit
применяется к которому IAuditable
IAudit
должен иметь конструктор, который принимает IAuditable
Я уверен, что это шаблон проектирования. были раньше, но я не могу понять это. Я был бы очень признателен, если бы кто-нибудь показал мне, как этого можно достичь.