【问题标题】:How to best populate 2 different objects, of an almost identical class, from 2 different DLLs without having to maintain two different objects?如何最好地从 2 个不同的 DLL 填充几乎相同类的 2 个不同对象,而不必维护两个不同的对象?
【发布时间】:2017-02-01 05:29:23
【问题描述】:

我有 2 个同名的类(我们称之为 ClassX),在相同的层次结构下,位于 2 个单独的 DLL 中。这两个 DLL 都来自第三方。 Dll1.ClassX 和 Dll2.ClassX 在这两个 DLL 中也位于相同的命名空间下。让 DLL 为 Dll1 和 Dll2。现在,让我们考虑同一个类的两个对象,objA 和 objB。我的应用程序必须要么只创建 objA 要么只创建 objB 或两者都取决于我们从数据库返回的某些条件。我使用外部别名来解决应用程序中类引用中的歧义。现在情况来了。

用例 1 或 2(创建单个对象,objA 或 objB)很容易。棘手的部分是当我必须在我的应用程序中创建 objA 和 objB 时。由于只有 objA 和 objB 的某些属性有所不同,因此蛮力的方法是创建 2 个不同的对象,然后在代码流经我的应用程序时同时填充它们。但是,这意味着我现在必须重新编写大部分对象创建代码以适应“额外”对象。对我来说听起来很乏味。我想知道是否有更好的方法。

【问题讨论】:

  • 尝试使用反射API
  • @Thakur:你能详细说明一下吗?
  • 创建对象副本(克隆它)的典型方法是序列化现有对象并反序列化新对象。您也可以使用相同的方法,例如json + 自定义活页夹就可以了。
  • @Sinatr :Dll2 对象版本 objB 是向后兼容的,但假设我将 objA 序列化为 a.xml,然后将其从 a.xml 反序列化回 objB,然后就可以了。但是,并非所有属性都得到适当填充。我知道这可以根据具体情况进行纠正,但这应该是我最后的手段。还有什么我可以尝试的吗?其次,objB 的一些方法签名与 objA 的不同。所以,这也是我必须考虑的事情。
  • “但是,并非所有属性都被正确填充” - 通常它们的默认值应该是合适的(如果它在 xml 中丢失)。如果背后有逻辑,那么你就无法避免运行它。仍然反序列化将使您免于手动分配。 “objB 的一些方法签名不同” - 方法签名与状态(属性和字段值)无关,您能详细说明这是什么问题吗?如果您提供一个简短的代码示例,这些对象的外观以及您现在如何解决问题,那将是最好的。其他解决方案可能不存在。

标签: c# .net dll


【解决方案1】:

使用一个新的通用接口和两个使用适当“真实”类的自有实例实现接口的适配器类来统一它们。

【讨论】:

  • 当然,会试一试。谢谢!
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多