Genel yöntem çağırmalarını işleyebilen bir DynamicObject
oluşturmaya çalışıyorum, ancak gerekli API - RC versions of 4.0 Framework'da bulunmasına rağmen - RTM'de dahili olarak işaretlenmiş gibi görünüyor (yani, CSharpInvokeMemberBinder
artık dahili). Bu kod için 4.0 RTM'de çalışacak bir eşdeğer var mı?DynamicObject öğesindeki genel yöntem çağırmalarını nasıl ele alabilirim?
public class TransparentObject<T> : DynamicObject {
private readonly T target;
public TransparentObject(T target) {
this.target = target;
}
public override bool TryInvokeMember(
InvokeMemberBinder binder, object[] args, out object result) {
var csBinder = binder as CSharpInvokeMemberBinder;
var method = typeof(T).GetMethod(binder.Name, BindingFlags.Public
| BindingFlags.NonPublic | BindingFlags.Instance);
if (method == null)
throw new MissingMemberException(string.Format(
"Method '{0}' not found for type '{1}'", binder.Name, typeof(T)));
if (csBinder.TypeArguments.Count > 0)
method = method.MakeGenericMethod(csBinder.TypeArguments.ToArray());
result = method.Invoke(target, args);
return true;
}
}
(http://bugsquash.blogspot.com/2009/05/testing-private-methods-with-c-40.html alınan kod)
Ben burada genel tür parametreleri almak için yansıma kullanabilirsiniz farkındayım, ama ben daha güzel bir çözüm arıyorum - eğer varsa.
Dupe http://stackoverflow.com/questions/5492373/get-generic-type-of-call-to-method-in-dynamic-object – jbtule
Yönlendirilmiş yönteminizdeki DLR aracılığıyla çıkarılan jeneriklerden memnun kalacak olsanız da, bunlara erişmeniz gerekmeyebilir. [ImpromptuInterface]: http: //code.google.com/p/impromptu-interface/wiki/UsageReallyLateBinding kazandı Çıkarılamayan jenerikler için çalışmayın ama yansımadan daha hızlı olacaktır. – jbtule
Bu jtule, Medium Trust'ta çalışıyor mu? –