2017-05-29 13 views
1

ASP.NET Webフォームaspx.csファイルのコードビハインドファイルでリポジトリクラスのインスタンスをインスタンス化する適切な方法は何ですか? 私はMVCコントローラでやったのと同じ方法でやってみましたが、何かを逃しているようです。 これはこれまで私が運を尽くして試したことです。適切何 「オブジェクト参照が非静的フィールド、メソッド、またはプロパティAjax._repoに必要です」:Webフォームのaspx.csファイルでリポジトリクラスを使用する適切な方法ASP.NET Webフォーム

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. 
    } 
} 

問題は、私はそれを構築しようとすると、Visual Studioは私に次のエラーを与えることですリポジトリクラスのインスタンスに静的なwebmethodアクセスを与える方法?

EDIT:明確化するために、静的メソッド内でリポジトリのインスタンスを使用する最良の方法は何ですか?

+1

問題はどこですか? –

+0

ビジュアルスタジオによると、これはオブジェクトのインスタンスではないため、これは構築されず、_repoの参照エラーが返されます。これは、それを使用ブロックに入れて動作しますが、それは私が避けようとしているものです。 – Knikedix

+0

質問を編集して、実際の問題が他の読者にとってはっきりわかるようにしてください。 –

答えて

0

Webメソッドは静的である必要があります。インスタンスメンバーにアクセスすることはできません。静的メソッド内でリポジトリを取得できます。

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

いっそ、WebMethod属性を放棄し、代わりにあなたのプロジェクトにWeb APIの使用を作り始める、依存性注入を利用します。

関連する問題