как добиться динамического вызова функции, то есть право вызывать функцию определяется из значений базы данных, используя c # - PullRequest
0 голосов
/ 12 октября 2010

приложение очень большое, поэтому дается краткое обоснование и проблема

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

разрешенная ему функция отображается в таблице базы данных

она убедилась, что имя фактической функции совпадает с именем, используемым в БД.

problem

имя извлекается и сохраняется как текстовое поле кнопки, а также в строковой переменной.

теперь, как я должен вызывать эту функцию, используя строковую переменную, имя которой хранится в ней!

как мы набираем

name-of-function ();

но здесь я не знаю имени, строка во время выполнения делает так, что я не могу написать как

строка ()? !!

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Ну, независимо от того, что вы делаете, должно быть какое-то отображение между «функцией» базы данных и вашей «реальной» функцией.Вероятно, вы можете использовать Reflection, используя ваши Types и MethodInfo.

Однако это звучит как кошмар обслуживания.Это также звучит так, как будто вы заново изобретаете роли пользователей или тому подобное.Я бы очень осторожно шел по этому пути - думаю, он будет гораздо более сложным и проблематичным, чем вы думаете.

2 голосов
/ 12 октября 2010

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

// Get the Type on which your method resides:
Type t = typeof(SomeType);
// Get the method
MethodInfo m = t.GetMethod("methodNameFromDb");
// Invoke dynamically
m.Invoke(instance, null);

В зависимости от ваших реальных потребностей вам придется немного изменить это - посмотрите используемые методы и типы в MSDN: MethodInfo , Invoke

...