15

Castle DynamicProxy を使用しており、ViewModels は次のようなプロキシです。

名前空間 MyApplication.ViewModels
{
   パブリック クラス MyViewModel : BaseViewModel、IMyViewModel
   {
   }
}

ただし、ビューモデルのプロキシは次のようになります。

{Name = "IRootViewModelProxyffecb133f590422098ca7c0ac13b8f98" FullName = "IRootViewModelProxyffecb133f590422098ca7c0ac13b8f98"}

プロキシされている実際の型の実際の型または名前空間を取得したい。これを行う方法はありますか?MyApplication.ViewModels.MyViewModel タイプを返すものが必要です。concreate クラスをプロキシとして使用している場合、BaseType はプロキシされている実際のクラスを返しますが、インターフェイスを使用する場合、BaseType は System.Object を返します。

4

2 に答える 2

19

実際のタイプを取得するには、次のことができるようです。

(proxy As IProxyTargetAccessor).DynProxyGetTarget().GetType()
于 2009-09-14T10:44:06.707 に答える
11

インターフェイスではなくクラスをプロキシしている場合は、次のように基になる型を取得できます。

var unproxiedType = ProxyUtil.GetUnproxiedType(proxy);

ProxyUtil にアクセスできない場合は、これも機能します。

private static Type GetUnproxiedType(object source)
{
   var proxy = (source as IProxyTargetAccessor);

   if (proxy == null)
     return source.GetType();

   return proxy.GetType().BaseType;            
}
于 2011-05-13T07:44:14.320 に答える