【问题标题】:Require classes from another dll as an input to API?需要来自另一个 dll 的类作为 API 的输入?
【发布时间】:2014-12-05 04:48:03
【问题描述】:

我有 3 个 C# 项目:A、B 和 C。B 引用 C,A 引用 B(A -> B -> C)。 B 是 A 的 API,C 为 B 做一些较低级别的工作。

B 向 A 公开了一些公共方法,这些方法当前需要 C 中的类作为输入。有没有办法让 A 在不直接引用 C 的情况下创建所需类的实例?

B 在其 API 中要求 C 中的类是不是很糟糕?在 B 中创建一个类来镜像 C 中的类,这样 B 只公开一个完全依赖于自身的 API 会更好吗?

【问题讨论】:

    标签: c# visual-studio dll interface projects-and-solutions


    【解决方案1】:

    “有没有办法让 A 在不直接引用 C 的情况下创建所需类的实例?”

    如果你想让 A 知道它在做什么,那就不行。当然,您可以让 A 调用 B 来创建他们都知道并由 C 中的类实现的某个接口的实例。

    “B 在其 API 中要求来自 C 的类是不是很糟糕?”

    在什么方面不好?在包括 .NET 本身在内的各种库中肯定有这方面的先例。对我来说这似乎并不坏,它可能是解决可能涉及循环引用的最佳方法(不是你的场景中有问题,但它确实出现了,这是解决它的一种方法)。

    “在 B 中创建一个类来镜像 C 中的类,这样 B 只公开一个完全依赖于自身的 API 会更好吗?”

    有时创建这样的代理对象有充分的理由,但这样做的唯一目的是为了将一个 DLL 中的类型对另一个 DLL 隐藏?不,我看不出这样更好。如果您想完成类似的事情,正确的方法是声明一个接口,A 和 B 都知道,并由 C 中的类实现。

    【讨论】:

    • 感谢您的回答!你给了我一些信心,现在我只会在 A 中引用 C ......虽然它仍然感觉有点不对,因为 A 并不真正关心 C(A 只想使用 B)。我也会考虑你的其他建议。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多