2016-08-25 2 views
1

есть ли прямой способ до изменить каждый параметр метода без необходимости его кодирования в рамках метода?
Я использую хранимые процедуры в качестве уровня базы данных, и задача заключается в том, чтобы предлагать использование подстановочных знаков для приложения, которое дает '*' подстановочный знак, и это должно быть заменено на «%» sql-подстановочный.

Имея WildcardAttribute, как это было бы здорово:Модифицировать параметры метода одинаково во многих методах

[WildcardAttribute('*', '%')] 
[WildcardAttribute('?', '_')] 
SearchMethod(s) // -> value of s: * 
{ 
    InvokeSPROC(s) // -> value of s: % 
} 

вместо:

SearchMethod(s) // -> value of s: * 
    { 
     InvokeSPROC(s.Replace("*", "%").Replace("?", "_")) 
    } 

Малинг эта модификация в sproc не вариант ..

Спасибо!

ответ

2

Конечно, вы можете использовать структуру AOP, такую ​​как PostSharp, для этого. https://www.postsharp.net/aop.net

Для примера см. http://doc.postsharp.net/method-decorator. Раздел Доступные параметры

Также возможно изменить значения параметров внутри ваших методов измерения. Все, что вам нужно сделать, это изменить значение элемента в коллекции Arguments. Помните, что все элементы в коллекции Arguments являются типами объектов, поэтому вам нужно быть осторожными с тем, как вы меняете значения. Если значение, которое вы изменяете, изначально было строкой, вы хотите убедиться, что оно остается строковым типом

Существует более AOP-рамки для .Net, поэтому вы можете прочитать о них.

Кстати, как выглядит ваш код InvokeSPROC? Вы не можете заменить там персонажей?

EDIT: Если это слишком сложно вы можете либо создать метод для него или, может быть, написать метод расширения, как это:

public static class StringExtensions 
{ 
    public static string SanitizeForStoredProcedure(this string pattern) 
    { 
     return pattern.Replace("*", "%").Replace("?", "_");  
    } 
} 

Вы можете вызвать его, используя

SearchMethod(s) // -> value of s: * 
{ 
    InvokeSPROC(s.SanitizeForStoredProcedure()) // -> value of s: % 
}  
+0

АОП кажется, что это сложное для моего требования, поэтому я буду улучшать методы вызова SPROC. –

+1

@ DanielDevo Требуется немного времени, да. Но это мощно. Но я обновил свой ответ альтернативой, используя метод расширения. Вы также можете создать простой метод, который делает то же самое, если вы убедитесь, что вам нужно только изменить один фрагмент кода, чтобы изменить поведение по своему усмотрению. Подробнее о методах расширения: https://msdn.microsoft.com/en-us/library/bb383977.aspx –

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