2017-05-29 1 views
1

Quelle est la méthode correcte pour instancier une instance d'une classe de référentiel dans un code derrière un fichier dans le fichier ASP.NET Web aspx.cs. J'ai essayé de le faire de la même façon que dans un contrôleur MVC, mais il semble que je manque quelque chose. C'est ce que j'ai essayé jusqu'ici sans succès.Méthode appropriée pour utiliser une classe de référentiel dans un fichier aspx.cs de formulaires Web Formulaires Web ASP.NET

public partial class Ajax : System.Web.UI.Page 
{ 
    private Repository _repo; 

    public Ajax() 
    { 
     _repo = new Repository(); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    [System.Web.Services.WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public static string CreateForm(object data) 
    { 
     _repo.Insert(data); 
    } 
} 

public class Repository() 
{ 
    public void Insert(object data) 
    { 
     //do something. 
    } 
} 

Le problème est que Visual Studio me donne l'erreur suivante lorsque je tente de le construire: « Une référence d'objet est nécessaire pour le champ non statique, la méthode ou la propriété Ajax._repo » Quel est le bon façon de donner un accès webmethod statique à une instance de la classe Repository?

EDIT: Pour clarifier, Quelle est la meilleure façon d'utiliser une instance d'un référentiel dans des méthodes statiques?

+1

Où est le problème? –

+0

Selon visual studio cela ne va pas construire et donner une erreur de référence sur _repo car ce n'est pas une instance d'un objet. Cela fonctionne en le mettant dans un bloc utilisant mais c'est ce que j'essaie d'éviter. – Knikedix

+0

Modifiez votre question, afin que le problème réel soit clair pour les autres lecteurs. –

Répondre

0

Les méthodes Web doivent être statiques. Ils ne peuvent pas accéder aux membres de l'instance. Vous pouvez simplement récupérer le référentiel dans votre méthode statique.

[System.Web.Services.WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static string CreateForm(object data) 
{ 
    Repository repo = new Repository(); 
    repo.Insert(data); 
} 

Ou mieux encore, abandonner WebMethod et commencer au lieu de faire usage Web API dans votre projet, utiliser l'injection de dépendance.