【问题标题】:Need some way to cast object from 3rd party DLL to object from local class需要某种方法将对象从第 3 方 DLL 转换为来自本地类的对象
【发布时间】:2011-12-17 10:08:31
【问题描述】:

背景:在我的网站中,第 3 方 HTTP 模块在 HttpRuntime 缓存中构建对象集合。在我的 Web 应用程序项目中,我需要检查缓存中的这些对象,并在找到具有特定属性值的对象时采取各种措施。

所以,我正在遍历缓存集合,尝试将每个对象强制转换为本地类的一个实例(这与第 3 方类的设计相同)。

(我知道我可以创建对第 3 方程序集的引用,但该程序集可能没有安装,所以我尝试创建一个更强大的方法)。

但是,演员表不起作用。 ASP.NET 知道原始对象来自不同的程序集。这是一个例外:

[A]3rdParty.HttpModule.CachedRequest 不能转换为 [B]3rdParty.HttpModule.CachedRequest。 A型起源于 '3rdParty.HttpModule,版本=3.6.0.0,文化=中性, PublicKeyToken=null' 在上下文“默认”的位置 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件\root\61910352\63f5dc4f\assembly\dl3\710995cc\37f36a76_71e5cb01\3rdParty.HttpModule.dll'。 B 型源自 'MyCompany.MyWebsite, Version=1.4.0.1396, Culture=neutral, PublicKeyToken=null' 在上下文“默认”中 位置 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\61910352\63f5dc4f\assembly\dl3\8bfb9ba0\0c053836_8595cc01\MyCompany.MyWebsite.DLL'。

我需要做的就是检查对象中 1 个字符串属性的值。有一些(简单的)方法可以做到这一点吗?即使将对象序列化为字符串并解析字符串也可以。

谢谢

【问题讨论】:

    标签: asp.net .net oop casting type-conversion


    【解决方案1】:

    .NET 是强类型的,所以不,您不能将对象强制转换为不同类型的东西——即使内存布局恰好相同,.NET 也知道它们是不同的类型。

    要读取对象的属性,而不需要对其程序集的编译类型引用,您需要使用反射或dynamicdynamic 可能更简单。

    dynamic theObject = // get the object from the cache
    DoSomethingWith(theObject.TheProperty);
    

    【讨论】:

    • 完美。这(动态)正是我需要的并且易于实现。谢谢!
    【解决方案2】:

    如果您需要在应用程序中重复这些步骤,我建议您使用 Mapper。

    AutoMapper 会做你想做的事。

    它将变量的内容从一个对象复制到另一个对象中的变量(变量名称需要匹配)。
    然后,您可以使用完全可编辑的对象(添加接口、继承等),然后在完成后将其“映射”回原始第三方对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 2010-10-26
      相关资源
      最近更新 更多