Artiklar » .NET 4.0 » Lägg till namespaces med Razor

 
 

Lägg till namespaces med Razor

Författare: vimpyboy
Datum: den 30 juli 2010
Antal lästa: 2386
Ej stjärnmärkt

När man använder ASP.NET MVC med WebFormViewEngine och vill komma åt en klass i vyn som ligger i ett separat namespace så kan man lägga till en referens i web.config för att få en renare vy.
Det kan enkelt göras med följande kod i web.config:

Kod:
<add namespace="Custom.Namespace" />



I ASP.NET MVC 3 så kom dock en ny View Engine, kallad Razor. Använder vi denna så fungerar inte längre det här, utan de namespaces vi lägger till i web.config ignoreras. Förhoppningsvis så kommer det här att fungera när ASP.NET MVC 3 är färdigt.
Det går dock att komma runt problemet snabbt och enkelt. Vi kan använda using i vyn för att få tillgång till klasserna:

Kod:
@using Custom.Namespace



Det här behövs dock i varenda vy där vi vill använda det, vilket gör att vi får mer kod att hålla reda på.

För att komma undan detta så behöver vi se hur Razor i sig fungerar. Varje gång en webbsajt med Razor startas så kopplas .cshtml och .vbhtml till InlinePageBuildProvider som används utav Razor för att kompilera vyerna. Det vi behöver göra är att lägga till ”Custom.Namespace” till BuildProvider för att det ska komma med i kompileringen.
För att göra det här så behöver vi en ny klass som vi kallar för PreApplicationStart. Den har en statisk metod där vi lägger till importen:

Kod:
using Microsoft.WebPages.Compilation;

public class PreApplicationStart
{
  public static void InitializeApplication()
  {
  CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
  }
}



För att få den här metoden att köras så kommer vi att använda oss utav ett nytt attribut i .NET 4.0 som heter PreApplicationStartMethodAttribute och som finns under System.Web. Det här attributet kan bara användas för assemblies, så vi lägger till följande rad i AssemblyInfo.cs:

Kod:
[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]



De parametrar vi skickar in är typen för klassen som innehåller metoden vi vill köra, och strängen har namnet på metoden.
När vi nu startar upp sidan så kommer vår metod att köras innan Application_Start i global.asax, vilket gör att vi alltid har tillgång till det här namespacet i vår applikation.
Nu kan vi utan problem komma åt klasserna i Custom.Namespace i alla Razor-vyer.
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0313 sekunder att ladda sidan