Frage

Hat jemand einen Vorschlag auf eine bessere Möglichkeit, eine Eigenschaften mit Castle Dynamicproxy abzufangen?

Insbesondere brauche ich das PropertyInfo, das ich abhörle, aber es ist nicht direkt auf der Überwachung. Ich tue also:

public static PropertyInfo GetProperty(this MethodInfo method)
{
    bool takesArg = method.GetParameters().Length == 1;
    bool hasReturn = method.ReturnType != typeof(void);
    if (takesArg == hasReturn) return null;
    if (takesArg)
    {
        return method.DeclaringType.GetProperties()
            .Where(prop => prop.GetSetMethod() == method).FirstOrDefault();
    }
    else
    {
        return method.DeclaringType.GetProperties()
            .Where(prop => prop.GetGetMethod() == method).FirstOrDefault();
    }
}

Dann in meinem iInterceptor:

public void Intercept(IInvocation invocation)
{
    bool doSomething = invocation.Method
                                 .GetProperty()
                                 .GetCustomAttributes(true)
                                 .OfType<SomeAttribute>()
                                 .Count() > 0;

}

War es hilfreich?

Lösung

Im Allgemeinen ist dies nicht verfügbar. DynamicProxy fällt Methoden (inkl. Getze und Setter) ab, und es kümmert sich nicht um Eigenschaften.

Sie können diesen Code ein wenig optimieren, indem Sie den Interceptor machen IOnBehalfAware (sehen hier) und Entdeckung der Methode-> Eigenschaftskartierung im Voraus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top