Я использую customData свойство MenuItemDefinition из навигации ASP.NETBoilerplate, чтобы определить некоторые дополнительные свойства.
Я могу получить доступ к свойствам, используя следующий код
var properties = menuItem.CustomData?.GetType().GetProperties();
bool isMegaMenu = (bool)properties.First(x => x.Name == "MegaMenu").GetValue(menuItem.CustomData);
Это прекрасно работает, но есть лучший способ получить доступ к свойствам.Я попытался получить доступ к объекту, сначала приведя его к динамическому
dynamic t = menuItem.CustomData;
isMegaMenu = t.MegaMenu;
Но это приводит к следующей ошибке
RuntimeBinderException: 'object' does not contain a definition for 'MegaMenu'
Я посмотрел на этот пост который предлагает использовать InternalsVisibleTo
, но он использует его в тестовом примере, я не уверен, что это хорошая идея использовать его на производстве.
РЕДАКТИРОВАНИЕ:
Вот как выглядит MenuItemDefinition и свойство customData
new MenuItemDefinition(
PageNames.Apps,
L("Apps"),
url: "",
icon: "flaticon-paper-plane",
customData: new { MegaMenu = true }
)