Toon posts:

[ASP.NET] NULL reference error vraag!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Met de HttpBrowserCapabilities is het mogelijk om te achterhalen of een "browser" een zoek robot is met de methode Crawler. Om in run time te bepalen of een browser of wel een browser is of wel een zoek robot heb ik deze in twee classen ingedeeld, namelijk in:

- Browser;
- Crawler;

Om in run time te kunnen bepalen of het een browser of een zoekrobot is heb ik een interface gedefinieerd. De classe Browser en Crawler erven van deze interface.

In de interface staat een property met een aantal methodes;

code:
1
2
3
4
5
6
7
 HttpBrowserCapabilities BrowserCapabilities
{
  get;
  set;
}

//overige methods


in een client classe maak ik gebruik van deze interface om in run time te kunnen bepalen of het een browser of een zoek robot is.

de code die bepaalt of het een browser of een zoek robot is plaats ik vervolgens in een global.asax file. Ik krijg vervolgens een Null reference error. erg vreemd allemaal. De code heb ik vervolgens weg gehaald en deze geplaatst in een normale *.cs file. Nou doet die het wel.

in de global.asax file ken ik de Request.Browser object ken ik aan de HttpBrowserCompabilitie object van de browser en de crawler classe. maar op de een of andere manier pakt die het niet. dit omdat ik ergens in een aspx.cs het volgende heb neergezet:

code:
1
 string naam = eenInterface.getName();


eenInterface is in dit geval ofwel een browser of wel een zoekrobot (dit is bekend gemaakt in de global.asax file). en de getName() method returnd een naam terug.

maar dit alles werkt gewoon niet. Hij doet het wel als ik de source code in een *.cs file plaats.

Weet iemand hoe dit in elkaar zit?

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
EenInterface is null, maar je vertelt niet waar die vandaan komt (of ik heb eroverheen gelezen, ik zie sowieso liever source code). Maar als je nou een stukje code plaatst hebben we er wat meer aan. Ik denk dat je zelf ook wel snapt dat EenInterface geen toegewezen reference heeft.

In je Global.asax moet je niet te veel gaan proggen, en waar dingen beschikbaar zijn is afhankelijk van binnen welke event je je code plaatst. In BegintRequest bijvoorbeeld is de sessionstate nog niet beschikbaar.

https://niels.nu


Verwijderd

Topicstarter
Hydra schreef op dinsdag 01 november 2005 @ 14:37:
EenInterface is null, maar je vertelt niet waar die vandaan komt (of ik heb eroverheen gelezen, ik zie sowieso liever source code). Maar als je nou een stukje code plaatst hebben we er wat meer aan. Ik denk dat je zelf ook wel snapt dat EenInterface geen toegewezen reference heeft.

In je Global.asax moet je niet te veel gaan proggen, en waar dingen beschikbaar zijn is afhankelijk van binnen welke event je je code plaatst. In BegintRequest bijvoorbeeld is de sessionstate nog niet beschikbaar.
Inderdaad je kan geen interface instantieren. hier een stukje source code (algemeen)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public class Context
{
  private Strategy strat;

  public Strategy ISTRAT
  {
    get{return this.strat;}
    set{this.strat=value;}
  }

        public void setStrategy(HttpBrowserCapabilities abrowser)
        {
        

            if(abrowser.Crawler != true)
            {
                this.ISTRAT=new Browser();
                this.ISTRAT.BrowserCapabilities=abrowser;
                
            }
            else
            {
                this.ISTRAT=new Crawler();
                this.ISTRAT.BrowserCapabilities=abrowser;
                
            }

        }

}

public interface Strategy
{
   private HttpBrowserCapabilities httpBrowser;

   HttpBrowserCapabilities Browser
   {
     get;
     set;
   }
   //aantal methods
}

public class Browser : Strategy
{
   public HttpBrowserCapabilities BrowserCapabilities
        {
            get { return this.httpBrowser; }
            set { this.httpBrowser = value; }
        }

  //andere methods
}

public class Crawler : Strategy
{
   public HttpBrowserCapabilities BrowserCapabilities
        {
            get { return this.httpBrowser; }
            set { this.httpBrowser = value; }
        }

  //andere methods
}


hier de source code die gebruikt maakt van het bovenstaande:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
//global.asax file

public void Application_OnPostRequestHandlerExecute(Object sender, EventArgs e)
{
....
....
  if(Request.Browser !=null)
 {
   acontext.setStrategy(Request.Browser);
 }
...
...
}


het bovenstaande werkt perfect. Alleen heb ik ook een aspx pagina aangemaakt om al deze gegevens te tonen om te kijken of het uberhaupt wordt opgeslagen.

hier de source code van hoe ik het aangeroepen hebt in de aspx page:

code:
1
2
3
...
string name =user.ISTRAT.getName();
....


het bovenstaande regel genereert dus een null reference error.

als ik de check ,die ik heb geplaatst in setStrategy method, dan werkt het wel. Maar dit is niet de bedoeling. Dit alles moet in de global asax file gebeuren.

In setStrategy method heb ik dus de objecten toegekend (of het ene browser of een zoekrobot is).

Mij vraag is dus waarom ik een null reference error krijgt als ik de check (dus de check die binnen de setStrategy method zit in de global.asax file plaats.