Получить имя метода, к которому осуществляется доступ к свойству, и прочитать значение свойства - PullRequest
0 голосов
/ 04 октября 2011

Я хотел бы поместить атрибут аспекта PostSharp в одно свойство и знать, из какого свойства метода был получен доступ и какое значение оно имело в то время.Это возможно с PostSharp?

Пример

static MyClass
{
[PostSharpAtrribute]
public string OutputFormat { get; set; }
}

public void Method1
{
MyClass.Instance.OutputFormat = "1";
}

public void Method2
{
MyClass.Instance.OutputFormat = "2";
}

public void Method3
{
MyClass.Instance.OutputFormat = "3";
}

PostSharp Aspect должен прочитать

Method "Method1" executed, property has value OutputFormat = 1
Method "Method2" executed, property has value OutputFormat = 2
Method "Method3" executed, property has value OutputFormat = 3

1 Ответ

0 голосов
/ 04 октября 2011

Чтобы получить текущее значение (до изменения, просто используйте Args.Value, потому что Набор еще не произошел.

[Serializable] 
public class MyPropertyAspect: LocationInterceptionAspect 
{ 
    public override void OnSetValue(LocationInterceptionArgs args) 
    { 
            object current = args.Value; //Set has not happened, remember this is an interception
            args.ProceedSetValue(); 

    }           
}

см. http://www.sharpcrafters.com/blog/post/Day-7-Interception-Aspects-e28093-Part-1.aspx и http://www.sharpcrafters.com/blog/post/Day-8-Interception-Aspects-e28093-Part-2.aspx

Чтобы определить вызывающего абонента, вам нужно пройти через стек вызовов с помощью StackTrace http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx

var st = new StackTrace();
st.GetFrame(1).GetMethod().Name; //Might also be frame 2

или просто добавить аспект трассировки в ваши методы (что в IMO лучше, чем отражение стека вызовов)http://www.sharpcrafters.com/blog/post/Day-4-OnMethodBoundaryAspect.aspx

...