У меня определены следующие интерфейсы:
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 (User сверху), я хотел бы иметь возможность создавать intance 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
Я уверен, что это шаблон дизайна, который у многих был раньше, но я не могу опустить его в голову. Я был бы очень признателен, если бы кто-нибудь мог показать мне, как это может быть достигнуто.