我的应用程序之间有一个分层的 .dll 系统,其中最低级别有一个提供某些功能的类 - 可以通过 GetClass() 函数接收此类的实例,然后我可以访问它的属性(基本上,变化对象信息的集合)。
现在我注意到,当我想从下一个更高级别的 .dll 访问该信息时,编译器会提示我没有引用较低级别的 .dll(定义类的那个)——实际上我想要避免,在我的架构中有一个很好的分层结构。
如何解决这个问题?我可以重新公开引用的类型吗?如果我想要完全相同的功能,我真的必须自己写一个包装器吗?还是我什至需要再次引用低级 .dll?
动态链接库 1:
class myClass;
myClass GetMyClass();
动态链接库 2:
myClass GetMyClass();
执行文件:
如何在不引用 DLL 1 的情况下访问调用 GetMyClass (DLL 2) 的结果?
最佳答案
您需要将您在所有层中使用的所有公共(public)类分离到一个新的 dll 中,然后在每个项目中引用这个 dll。
尝试使用interfaces因此您可以处理契约(Contract)(功能)而不是具体实现。它将帮助您避免不必要的引用。
// common dll
public interface IMyClass
{
string MyData { get; set; }
IMyClass GetMyClass();
}
// dll1
public class myClass : IMyClass
{
public string MyData { get; set; }
public IMyClass GetMyClass() { return new myClass() { MyData = "abc" }; }
}
// dll2
public class myClass2
{
public IMyClass GetMyClass()
{
var c1 = new myClass();
var c2 = c1.GetMyClass();
return c2;
}
}
// exe (references common and dll2)
public class Program
{
public static void Main(string[] args)
{
var c1 = new myClass2();
IMyClass c2 = c1.GetMyClass();
Console.Writeline(c2.MyData);
}
}
关于c# - 公开引用的类型(类)而不需要额外的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792543/