Типобезопасная настройка объектов со словарем, имеющим ключ `Type`

У меня есть общий словарь объектов с ключом типа Тип :

public class DynamicObject : IDictionary<Type, object>

Идея состоит в том, что этот объект используется совместно в Архитектура на основе плагинов, и поэтому тип (который может находиться в .dll плагина) используется в качестве ключа для предотвращения конфликтов между плагинами. Этот тип также используется для хранения метаданных о поле (таких как описание этого поля или фактический тип этого поля).

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

DynamicObject someObject;
string someValue;
someObject[typeof(UsernameField)] = someValue;

Единственная проблема заключается в том, что это небезопасно по типу, даже если тип UsernameField является зная точный тип ожидаемого значения (например, int или в данном случае строка ), значение, предоставленное здесь, просто вводится как объект. Я хотел бы использовать дженерики, чтобы сделать установку / получение типа свойств безопасным, но я не уверен, как это сделать. Пока лучшее, что я придумал, это следующее:

// Field is a base class for all types used as keys on DynamicObject
[Description("Username of the user")]
public class UsernameField : Field
{
    public static void Set(DynamicObject obj, string value)
    {
        obj[typeof(UsernameField)] = someValue;
    }
}

// To set fields
UsernameField.Set(obj, someValue);

Это типобезопасный, однако это означает, что каждый из моих типов полей (например, UsernameField ) имеет почти идентичный static Set метод.

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

В качестве альтернативы, используется Тип в качестве ключа, например это хорошая идея, или есть скрытые подводные камни, о которых я еще не знаю?

6
задан Justin 9 January 2012 в 14:03
поделиться