类库可以使用存储在主项目中的函数吗?

时间:2014-05-01 14:40:14

标签: vb.net .net-assembly

在我的VB.NET应用程序中,我想将一些代码(一个类)移动到一个单独的文件中。单独的文件将使用位于主项目中的函数。

如果我创建了一个类库,则DLL中没有定义从DLL调用的函数,Visual Studio也不会编译它。

我可以用什么方式将代码移入文件并在运行时加载/执行它,并将结果作为我的主代码?我不知道我是否清楚......

2 个答案:

答案 0 :(得分:1)

这可以使用接口间接完成。在库中创建一个公共接口,该接口包含您需要针对该主项目的类进行的调用。让主项目的类实现此接口。当主项目启动时,它通过接口将此类的实例传递给库项目。库应存储此引用。它现在可以通过接口使用此引用对主项目类进行调用。

图书馆计划:

Public Interface ITimeProvider
    ReadOnly Property Time As Date
End Interface

Public Class LibraryClass
    Private Shared _timeProvider As ITimeProvider

    Public Shared Sub Init(timeProvider As ITimeProvider)
        _timeProvider = timeProvider
    End Sub

    Public Function GetTimeString() As String
        Return "The current time is " & _timeProvider.Time.ToString
    End Function
End Class

主要项目:

Public Class SimpleTimeProvider
    Implements ClassLibrary1.ITimeProvider

    Public ReadOnly Property Time As Date Implements ClassLibrary1.ITimeProvider.Time
        Get
            Return Date.Now
        End Get
    End Property
End Class

Public Class MainClassTest

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        ClassLibrary1.LibraryClass.Init(New SimpleTimeProvider)

        Dim test As New ClassLibrary1.LibraryClass
        Console.WriteLine(test.GetTimeString)
    End Sub
End Class

此示例使用在Main项目中定义的类来使用库项目。

答案 1 :(得分:0)

简单的答案是 - 你不能。

您不能assemblyA引用assemblyB assemblyB引用assemblyA

解决方案可能是将应用程序和程序集使用的任何代码移动到程序集中。然后两者都可以访问此代码