获取代理对象的基础类型

发布于 2024-08-04 03:41:24 字数 511 浏览 12 评论 0原文

我正在使用 Castle DynamicProxy,我的 ViewModel 是一个代理,如下所示:

namespace MyApplication.ViewModels
{
   public class MyViewModel : BaseViewModel, IMyViewModel
   {
   }
}

我的视图模型的代理看起来像这样:

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

我想获取的实际类型或命名空间被代理的实际类型。有什么办法可以做到这一点吗?我想要返回 MyApplication.ViewModels.MyViewModel 类型的东西。如果我使用 concreate 类作为代理,BaseType 将返回被代理的实际类,但在使用接口时,BaseType 将返回 System.Object。

I'm using Castle DynamicProxy and my ViewModels are a proxy, something like this:

namespace MyApplication.ViewModels
{
   public class MyViewModel : BaseViewModel, IMyViewModel
   {
   }
}

a proxy of my viewmodel looks like this though:

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

I want to get the actual type or namespace of the actual type that is being proxied. Is there any way to do this? I want something that returns MyApplication.ViewModels.MyViewModel type. If I'm using concreate class as proxies, BaseType returns the actual class that is being proxied, but when using the interface, BaseType would return System.Object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

◇流星雨 2024-08-11 03:41:24

看来您可以执行以下操作来获取实际类型:

(proxy As IProxyTargetAccessor).DynProxyGetTarget().GetType()

It seems you can do the following to get the actual type:

(proxy As IProxyTargetAccessor).DynProxyGetTarget().GetType()
半山落雨半山空 2024-08-11 03:41:24

如果您代理的是类而不是接口,则可以像这样获取底层类型:

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;            
}

If you are proxying a class and not an interface, you can get the underlying type like this:

var unproxiedType = ProxyUtil.GetUnproxiedType(proxy);

If you don't have access to ProxyUtil this will also work:

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

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

   return proxy.GetType().BaseType;            
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文