Есть ли возможность управлять классом Expando, чтобы не допустить добавления свойств / членов при определенных условиях? - PullRequest
1 голос
/ 13 марта 2019

Насколько я могу судить, класс Expando в Kephas позволяет добавлять новых членов на лету.В отличие от ExpandoObject в .NET, я заметил, что он не запечатан, поэтому я мог изменить его поведение, но я не знаю, как.

[EDITED]

Мой сценарийсделать расширитель доступным только для чтения в определенное время.

1 Ответ

1 голос
/ 14 марта 2019

Попробуйте этот фрагмент:

public class ReadOnlyExpando : Expando
{
    private bool isReadOnly;

    public ReadOnlyExpando()
    {
    }

    public ReadOnlyExpando(IDictionary<string, object> dictionary)
        : base(dictionary)
    {
    }

    public void MakeReadOnly()
    {
        this.isReadOnly = true;
    }

    protected override bool TrySetValue(string key, object value)
    {
        if (this.isReadOnly)
        {
            throw new InvalidOperationException("This object is read only").
        }

        return base.TrySetValue(key, value);
    }
}

Для других сценариев вы можете проверить класс LazyExpando, который предоставляет способ разрешения динамических значений на основе функции, а также обрабатывает исключение циклических ссылок.

...