Доступ к экземпляру класса модели из пользовательского AdditionalMetadataAttribute (asp.net mvc 5)

У меня следующая ситуация - мне нужно написать собственный атрибут дополнительных метаданных, который на основе другого значения свойства (из той же модели) добавляет значение в словарь AdditionalValues. Сейчас моя проблема в том, что я не могу получить доступ к экземпляру модели внутри моего класса атрибутов.

[AttributeUsage(AttributeTargets.Property)]
public class ExtendedAdditionalMetadataAttribute : Attribute, IMetadataAware
{
    #region Private properties
    private string extraFieldToCheck { get; set; }

    private string extraFieldValueToCheck { get; set; }

    private string fieldToBeAdded { get; set; }

    private string fieldValueToBeAdded { get; set; }
    #endregion

    #region Constructor
    public ExtendedAdditionalMetadataAttribute(string extraFieldToCheck, string extraFieldValueToCheck,
        string fieldToBeAdded, string fieldValueToBeAdded)
    {
        this.extraFieldToCheck = extraFieldToCheck;
        this.extraFieldValueToCheck = extraFieldValueToCheck;
        this.fieldToBeAdded = fieldToBeAdded;
        this.fieldValueToBeAdded = fieldValueToBeAdded;
    }
    #endregion

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        // HOW TO GET THE MODEL CLASS INSTANCE??? 
        // metadata.ContainerType is correct by metadata.Container is null.
    }
}

Как видно из комментариев к коду, внутри OnMetadataCreated мне нужно получить доступ к экземпляру класса Model, но, хотя ContainerType правильный, свойство Container имеет значение NULL.

Не могли бы вы помочь мне, дав мне подсказку по этому вопросу?

ЗАРАНЕЕ СПАСИБО!

Evdin

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ

Учитывая, что я не дал много объяснений, я также приведу здесь пример того, как я хотел бы использовать этот атрибут в классе модели:

/// <summary>
/// Gets or sets the IsAccountCreated
/// </summary>
/// <value>The IsAccountCreated.</value>
[UIHint("FormFieldStringTemplate")]
[ExtendedAdditionalMetadata("IsExternalAccount", "true", "ReadOnly", "true")]
public override Boolean IsAccountCreated { get; set; }      

/// <summary>
/// Gets or sets the IsAccountEnabled
/// </summary>
/// <value>The IsAccountEnabled.</value>
[Display(Name = "Este cont activ?")]
[UIHint("FormFieldStringTemplate")]
[ExtendedAdditionalMetadata("IsExternalAccount", "true", "ReadOnly", "true")]
public override Boolean IsAccountEnabled { get; set; }      

/// <summary>
/// Gets or sets the IsExternalAccount
/// </summary>
/// <value>The IsExternalAccount.</value>
[Display(Name = "Este cont extern?")]
[UIHint("FormFieldStringTemplate")]
[AdditionalMetadata("ReadOnly", "true")]
public override Boolean IsExternalAccount { get; set; } 

Позже и позже Править

Хотя ответ @ stephen-muecke более чем прост и приемлем в текущей ситуации, для решения задач программирования я искал другие варианты и нашел следующую возможность: реализация пользовательскогоDataAnnotationsModelMetadataProvider учебный класс. В нескольких простых словах - это работает, и я могу получить экземпляр класса модели, НО, только если класс модели является простым классом, в противном случае есть много недостатков - например, если у вас есть класс Model, и вы используете его в своем представлении тогда это нормально, но если у вас есть класс внутри другого класса (модель внутри модели представления), этот подход больше не применим.

Еще раз спасибо @ Стивен-Мюке!

Ответы на вопрос(1)

Ваш ответ на вопрос