Опасность использования отражения для добавления строк подключения в ConfigurationManager.ConnectionString

Я видел несколько сообщений, подробно описывающих, как обойти барьер ReadOnly при добавлении строк подключения в ConfigurationManager.ConnectionStrings. См. пример одного из таких сообщений ниже. В каждом из этих примеров есть ужасное, но расплывчатое предупреждение о том, что применяемая техника «опасна». В чем опасность?

Dim cssc As ConnectionStringSettingsCollection = WebConfigurationManager.ConnectionStrings
Dim t As Type = cssc.GetType().BaseType ' System.Configuration.ConfigurationElementCollection
Dim fi As FieldInfo = t.GetField("bReadOnly", BindingFlags.Instance Or BindingFlags.NonPublic)
fi.SetValue(cssc, False)

person Joe    schedule 04.08.2013    source источник


Ответы (1)


Одна из причин, по которой это «опасно», заключается в том, что вы полагаетесь на закрытое поле с именем bReadOnly. Это поле не является частью общедоступного API .NET и может быть изменено без предварительного уведомления в будущей версии .NET. Если это произойдет, и если вы обновитесь до этой версии, ваш код больше не будет работать.

person Michiel van Oosterhout    schedule 04.08.2013