c# - 公开引用的类型(类)而不需要额外的引用

标签 c# dll reference layer

我的应用程序之间有一个分层的 .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/

相关文章:

c++ - 依赖遍历器中缺少 Dll

c++ - 生成所有可能调用堆栈的树

php - 如何在 PHP 中显式创建变量的副本?

c# - 避免对静态文件的 404 请求进行集成管道身份验证

c# - ASP 点网 : How to repeat HTML parts with minor differences on a page?

调试 native (ANSI C DLL)和托管(C# 汇编)代码

c++ - *return 如何隐式返回引用

c++ - 比函数引用更有效的方法?

c# - 是否可以防止 foreach 展平矩形阵列?

c# - 匹配数字类型的通用约束