Создание экземпляра Интерфейс

У меня определены следующие интерфейсы:

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

Я уверен, что это шаблон проектирования. были раньше, но я не могу понять это. Я был бы очень признателен, если бы кто-нибудь показал мне, как этого можно достичь.

17
задан Marijn 19 August 2011 в 13:29
поделиться