2014-01-26 2 views
3

Я моделирую некоторые финансовые продукты, и каждый продукт имеет свою формулу ценообразования. В приложении я хотел бы разрешить конечному пользователю создать свой собственный продукт с помощью формулы. И эта формула может использоваться моей заявкой для оценки продукта.Как разрешить конечным пользователям создавать собственные функции?

Что-то вроде:

Formula as string = "f(x) = x * 2" 
Dim Result as double = call(Formula, 1) 

Я знаю, что это возможно в Matlab:

f="@(x)(x*2)"; 
Result = feval(f,1); 

Я написал класс в Matlab, который реализует эту функцию и интегрировать его в проект VB.Net, но каждый функция выполняет 4700 раз выполнение одной и той же функции, непосредственно написанной на VB.Net, которая не является доступной в отношении потребностей бизнеса.

Возможно ли это в .Net?

+0

вы можете посмотреть на [DynamicMethod Class] (http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod (v = vs.110) .aspx), но это может быть чем вы хотите. Несколько лет назад у меня была такая же потребность в клиенте, и выяснилось, что примерно в 80% случаев они использовали один и тот же набор функций снова и снова только с разными аргументами. Я закончил создание набора из них, а затем пусть они выбирают формулу по имени и задают значения arg. Затем используйте оператор CASE для отправки аргументов в нужную функцию. NET, возможно, имеет более чистый способ. – Plutonix

+0

На самом деле это то, чего я хочу избежать: Case case, потому что потребность может включать в себя совершенно разные формулы каждый раз ... –

+0

Что делать, если они написали функции в VB.NET (Express Edition является бесплатным)? Они могут создавать библиотеку классов, а затем сообщать вам об этом. –

ответ

0

Вы можете посмотреть в MEF, чтобы конечные пользователи предоставили DLL-модули в определенном формате (см. Ссылку, о которой я упоминал), которая позже будет обнаружена в вашей программе и выполнена в любой момент времени.

Или использовать математический анализатор:

Но я чувствую, что подход # 1 был бы более гибким.

Смежные вопросы