C# 是否需要其他dll中的类作为API的输入?

C# 是否需要其他dll中的类作为API的输入?,c#,visual-studio,dll,interface,projects-and-solutions,C#,Visual Studio,Dll,Interface,Projects And Solutions,我有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,这样会更好吗 有没有一种方法可以让a在不直接引用C的情况下创建所需类的实例 如果你想让A知道这就是它在做的事情,就不需要了。当然,你可以通过调用B来创建他们都知道的某个接口的

我有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,这样会更好吗

有没有一种方法可以让a在不直接引用C的情况下创建所需类的实例

如果你想让A知道这就是它在做的事情,就不需要了。当然,你可以通过调用B来创建他们都知道的某个接口的实例,该接口是由C中的一个类实现的

B在其API中需要C中的类对其不利吗

坏在什么方面?当然,在各种库中都有这样的先例,包括.NET本身。这对我来说并不是天生的坏事,它可能是解决涉及循环引用的问题的最好方法,这在您的场景中不是问题所在,但它确实出现了,这是解决问题的一种方法

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


有时有很好的理由创建这样的代理对象,但这样做的唯一目的是从另一个DLL隐藏一个DLL中的类型?不,我不觉得这样更好。如果您想完成类似的任务,正确的方法是声明一个接口,由A和B知道,并由C中的类实现。

谢谢您的回答!你给了我一些信心,现在我将只参考C中的。。。尽管如此,它仍然感觉有点错误,因为a并不真正关心C,a只想使用B。我也会考虑你的其他建议。再次感谢!