【问题标题】:Finding target of LinFu proxy objectLinFu 代理对象的查找目标
【发布时间】:2010-02-20 22:59:09
【问题描述】:

这几乎是一个重复的问题,但我没有使用 Castle Dynamic Proxy,而是使用 LinFu Getting underlying type of a proxy object

我正在使用 automapper 创建接口代理,这些代理将发送到 Asp.net MVC 中的视图模型。我的问题是我可以告诉 MVC 的默认 MetadataProvider 通过调用模型上的 .GetType() 来查找属性和元数据。

因此,EditorFor() 和 DisplayFor() 模板不会生成任何字段。我需要做的是找到代理目标类型,然后生成我的模板。我知道我可以解析名称并使用 GetType("thename") 但想知道是否有简单的方法。

【问题讨论】:

    标签: asp.net-mvc linfu modelmetadata


    【解决方案1】:

    LinFu.DynamicProxy 不直接公开代理的底层对象。它只是将每个方法调用重定向到一个 IInterceptor 实现实例。为了访问底层对象,您必须确定当前拦截器实例是否实际上具有目标类实例。

    如果您使用 AutoMapper、AFAIK,他们使用 LinFu.DynamicObject 来做很多鸭子录音,并且在 LinFu.DynamicObject 生成的动态类型上调用 GetType() 甚至不会让您获得实际类型在你的领域模型中——它只会让你得到一个被 LinFu 自己直接粘贴到一起的对象。

    【讨论】:

    • 我发现从代理中检索数据的最佳方法是让代理实现一个已知的私有接口,然后拦截对该接口的访问并返回您需要的值。
    【解决方案2】:

    获取最新的 AutoMapper - 它使用 Castle Dynamic Proxy,您已经知道如何从那里获取它 :)

    【讨论】:

    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 2016-03-27
    • 2020-07-26
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多