Экземпляр, дающий ошибку ссылки на объект - PullRequest
0 голосов
/ 11 ноября 2009

Я написал новый DAL и BLL, но когда я пытаюсь создать экземпляр моего класса, я получаю ошибку Object Reference, есть ли что-то конкретное, что я должен искать? Я довольно новичок в этой концепции?

Звонок такой:

Protected Sub btnSignin_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnSignin.Click
    Dim l As New Log()
    l.Log = "Attempted staff login with username [" & txtUsername.Text & "] and password [" & txtPassword.Text & "]"
    l.LogId = 0
    l.StaffId = 0
    l.LogDate = Date.Now()
    l.Insert()

Вызов 'Insert', в котором я получаю ошибку ссылки, вызывает эти функции в моем BLL (BLL / Log.vb);

Imports Microsoft.VisualBasic
Imports System.Collections.Generic
Imports System.Transactions
Imports System.Text
Imports Harmony.Zizz.DAL
Namespace Harmony.Zizz.BLL.Zizz
    Public Class Log
        Inherits BaseZizz

        Protected _logid As Integer = 0
        Protected _log As String = ""
        Protected _staffid As Integer = 0
        Protected _logdate As DateTime = Date.Now

        Public Sub New()

        End Sub

        Public Sub New(ByVal logid As Integer, ByVal log As String, ByVal staffid As Integer, ByVal logdate As DateTime)

        End Sub

'////property setup removed for brevity ////
        Public Property LogId() As Integer
        Public Property Log() As String
        Public Property LogDate() As DateTime

        Public Function Insert() As Integer
            Return Harmony.Zizz.BLL.Zizz.Log.InsertLog(Me.LogId, Me.Log, Me.StaffId, Me.LogDate)
        End Function

        Public Shared Function InsertLog(ByVal logid As Integer, ByVal log As String, ByVal staffid As Integer, ByVal logdate As DateTime) As Integer
            HttpContext.Current.Trace.Write("Fired InsertLog BLL (log.vb) Line 61")
            Using scope As New TransactionScope()
                HttpContext.Current.Trace.Write("Within InsertLog BLL Transaction Scope (log.vb) Line 63")
                Dim record As New LogDetails(logid, log, staffid, logdate)
                HttpContext.Current.Trace.Write("Created LogDetails Object InsertLog BLL (log.vb) Line 65")
                Dim ret As Boolean = SiteProvider.Zizz.InsertLog(record)
                HttpContext.Current.Trace.Write("Inserted LogDetails object into SiteProvider InsertLog BLL (log.vb) Line 61")
                scope.Complete()
                Return ret
            End Using
        End Function

    End Class
End Namespace

Трассировка стека попадает в строку Dim ret As Boolean = SiteProvider. Звонки SiteProvider содержат этот код, и я думаю, что это происходит из-за ошибки, но я не знаю, почему - или как это исправить ---:

Imports Microsoft.VisualBasic
Namespace Harmony.Zizz.DAL
    Public NotInheritable Class SiteProvider
        Public Shared ReadOnly Property Zizz() As ZizzProvider
            Get
                Return ZizzProvider.Instance
            End Get
        End Property
    End Class
End Namespace

Помощь, если она может быть оказана, будет очень цениться. Intellisense не выделяет никаких проблем, и если я создаю веб-сайт в VS, я получаю несколько предупреждений об информации схемы в файле web.config (не связан), в противном случае нет проблем.

Помощь оценена.

Ответы [ 2 ]

1 голос
/ 11 ноября 2009

Крис,

Я согласен с Слагстером в его ответе о том, что, вероятно, ZizzProvider.Instance означает Nothing. Скорее всего, это связано с тем, как это реализовано. Я предполагаю, что Instance является свойством, если это так, то проверьте это свойство (в блоке свойств) при возврате экземпляра, сначала проверьте, является ли экземпляр Nothing - если это так, обновите экземпляр и сохраните его в классе, прежде чем вернуть его. Если вы можете дать нам код этого ZizzProvider, мы могли бы помочь немного дальше.

Надеюсь, это поможет,

Спасибо!

1 голос
/ 11 ноября 2009

Если вы поставили точку останова на линии

Return ZizzProvider.Instance

вы, скорее всего, увидите, что ZizzProvider или ZizzProvider.Instance имеют значение null, поэтому вернувшись к строке SiteProvider.Zizz.InsertLog (record), нельзя вызвать InsertLog, поскольку Zizz имеет значение null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...