2017-12-01 13 views
1

IHttpContextAccessorがコンストラクタ内のユーティリティクラスで使用されていますが、コントローラでそのクラスのインスタンスを作成するにはどうすればいいですか?コンストラクタ内のユーティリティクラスで使用されるIhttocontextaccessor、コントローラでそのクラスのインスタンスを作成する方法

//ユーティリティクラス

public class DBRepository 
    { 

     private readonly IHttpContextAccessor _contextAccessor; 

     public DBRepository(IHttpContextAccessor contextAccessor) 
     { 
      _contextAccessor = contextAccessor; 
     } 
} 

私はこれをやっていると私は私のコントローラで立ち往生しています。

public class HomeController : Controller 
{ 

     using (DBRepository DBRepo=new DBRepository()) 
     { 

     } 
} 

どうIHttpContextAccessorパラメータを渡すためのユーティリティクラスへ

+0

これはDependency Injectionをサポートするパターンのようです。 *どこかに*登録コードがあると思いますので、心配する必要はありません。 DBRepository型のパラメータを受け入れるHomeController用のコンストラクタを用意しておくと、パイプラインがコントローラを作成するときに注入されることになります。 – GPW

+0

asp.net Core(これをタグ付けしているので)と仮定すると、このコードはStartup.csクラスにある可能性があります。 – GPW

+0

[ASP.NET Core 1.0のDIのStartupクラスにIHttpContextAccessorを追加する方法](https://stackoverflow.com/questions/38184583/how-to-add-ihttpcontextaccessor-in-the-startup) -class-in-the-di-in-asp-net-core-1) – mjwills

答えて

0

あなたはあなたのクラスのためのインタフェースを作成し、依存性注入フレームワークがあなたのためにそれを注入することができます。さて今、あなたは必ず、なぜ今、あなたのコントローラに

public class HomeController : Controller 
{ 
    private readonly IDbRepository repository; 
    public HomeController (IDbRepository repository) 
    { 
     this.repository = repository; 
    } 
    public ActionResult Index() 
    { 
     var posts = this.repository.GetPosts(); 
     //to do : Return something 
    } 
} 

をコンストラクタ・インジェクションを使用することができます

services.AddTransient<IDbRepository , DBRepository>(); 

StartupクラスのConfigureServices方法であなたの具体的な実装には、このインターフェイスをマップ

public interface IDbRepository 
{ 
    // Add methods signature here 
    public List<Post> GetPosts(); 
} 
public class DBRepository : IDbRepository 
{ 
    private readonly IHttpContextAccessor _contextAccessor; 
    public DBRepository(IHttpContextAccessor contextAccessor) 
    { 
     _contextAccessor = contextAccessor; 
    } 
    //implement those methods 
    public List<Post> GetPosts() 
    { 
     // to do : return a list of Posts 
    } 
} 

データアクセスメソッド/クラスのHttpContextにアクセスしたいHttpContextは、Webレイヤーのものです。 HttpContextを直接渡す代わりに、おそらく必要な値だけをデータアクセスメソッドに渡すことができます。こうすることで、データアクセスレイヤーをHttpcontextにあまり依存しないようにすることができます。これはWebのものです

関連する問題