我正在重新编写一些具有更好体系结构的程序。它们是VS 2017中较小,相对简单的多项目解决方案,包括WinForms中的GUI,BLL类库和DAL类库-全部在VB.NET中。
一切正常,我几乎没有问题。我正在使用NLog记录到数据库,并且运行良好。目前,它仅在一层GUI上登录。我将所有异常都扔到顶层并将其捕获到那里,并将其记录在那里。
我想更改我使用NLog的方式并将其与GUI,BLL和DAL层中的任何一个分开-将其迁移到第4层-实用程序类库层。
这就是我所做的:
创建了一个带有接口和公共类的实用程序类库。公共类继承NLog Logger并隐含接口:
Public Interface ILogger
Sub Info(message As String)
Sub Info(ex As Exception, message As String)
Sub Debug(message As String)
Sub Debug(ex As Exception, message As String)
Sub [Error](message As String)
Sub [Error](ex As Exception, message As String)
End Interface
然后,上课:
Imports NLog
Public Class MyLogger
Inherits Logger
Implements ILogger
Public Shared _log As Logger = LogManager.GetLogger("databaseLogger")
Public Sub Debug(message As String) Implements ILogger.Info
_log.Debug(message)
End Sub
Public Sub Debug(ex As Exception, message As String) Implements ILogger.Info
_log.Debug(ex, message)
End Sub
Public Sub Info(message As String) Implements ILogger.Debug
_log.Info(message)
End Sub
Public Sub Info(ex As Exception, message As String) Implements ILogger.Debug
_log.Info(ex, message)
End Sub
Public Sub [Error](message As String) Implements ILogger.Error
_log.Error(message)
End Sub
Public Sub [Error](ex As Exception, message As String) Implements ILogger.Error
_log.Error(ex, message)
End Sub
End Class
然后我在相同的解决方案中创建了一个winform项目,引用了实用程序类,并将其粘贴在启动表单中:
Public Class Form1
Private _logger As LogTest2.ILogger
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
_logger.Debug("test")
End Sub
End Class
但是,当我运行它时,我得到了一个错误:
“对象引用未设置为对象的实例。”
我显然缺少一些东西-我已经在SO上进行了大量搜索,尽管有很多问题都显示了C#示例,但我看不到VB.NET示例。有人可以帮我吗?