解耦:无法实现间接引用

Decoupling: Unable to implement indirect referencing

我的代码 A、B、C 分为三个部分。B 是一个 class 库,它引用 A 也是一个 class 库。在A中,定义了一个classMathOperations,其中包含一个函数ADD。 B 部分有一个 class Factory,它又有一个函数 createMathsObject,其中 returns 是一个 MathOperations 类型的对象。 C 部分引用 B。我可以取消 B 部分并在 C 部分中创建 MathOperations 类型的对象,并在定义 class 的地方直接使 C 引用 A。但是,我正在尝试查看如何分离代码的各个部分,在这种情况下,A 和 C.I 给出了 A、B 和 C 三部分中的每一个的代码。提到了我收到的错误消息稍后我需要你的帮助。

A 部分:Class 库 - 命名为 MathLibrary.dll

Public Class MathOperations
    Function ADD(ByVal a As Integer, ByVal b As Integer) As Integer
        Return (a + b)
    End Function
End Class

B 部分:Class 库 - 命名为 FactoryMathsLibrary.dll,其中引用了 MathLibrary.dll

Imports MathLibrary
Public Class Factory
    Shared Function createMathsObject() As MathOperations
        Return New MathOperations()
    End Function
End Class

C 部分:Exe 文件 - 引用 FactoryMathsLibrary.dll

Imports FactoryMathsLibrary
Module Module1
    Sub Main()
        Dim a, b As Integer
        Dim m As Object = Factory.createMathsObject() 'Error comes here
        Console.Write("Enter 1st value: ")
        a = Console.ReadLine()
        Console.Write("Enter 2nd value: ")
        b = Console.ReadLine()
        Console.WriteLine("a + b = {0}", m.ADD(a, b))
        Console.ReadLine()
    End Sub
End Module

我的印象是,既然 C 引用 B,B 引用 A,那么一切都会好起来的。但是我在行 Dim m As Object = Factory.createMathsObject() 中收到错误。报错信息如下: 能否请大神帮忙解答一下报错的原因和解决方法??

我完全按照你的方式做了,在你的 exe 项目中你没有添加对“MathLibrary.dll”的引用。如果不在 exe 项目中包含第二个库,则不能包含引用另一个库的库 (Unless you merge them into one)!如果您不也包含它,那么您将遇到您所遇到的问题。

因此, 您只需添加对“FactoryMathsLibrary.dll”和“MathLibrary.dll”[=30= 的引用] Project > project_name Properties... > References > Add... > MathLibrary.dll > OK

❌ 无引用

✔️有参考