2011-10-22 9 views
1

ASP.NET MVCでNinjectを使用しています。基本的に、BaseControllerクラスの保護されたメンバー_connectionStringBuilderを、SourceCodeManagerクラスのコンストラクター引数として渡したいとします。Ninject:コンストラクタ引数としてプライベートメンバーを渡す

私は基本的にコントローラレベルでいくつかの処理を行い、それをSourceCodeManagerのようなさまざまなビジネスレイヤクラスに渡したいと思います。

これはちょっとファンキーですが、基本的に同じ変数_connectionStringBuilderをすべてのビジネスレイヤークラスに渡したいと思います。 (私は、彼らがクッキーにユーザー名とパスワードを保存する従来のASPアプリケーションをアップグレードしようとしています!)

public class SourceCodeManager : ParisDataAccessManager, ISourceCodeManager 
    { 
     SourceCodeManager(IParisConnectionStringBuilder connectionStringBuilder) 
      : base(connectionStringBuilder) 
     { 

     } 

     public List<SourceCodeList> GetManualSourceCodes() 
     { 
      using (var connection = new SqlConnection(connectionStringManager.GetConnectionString())) 
      { 
       connection.Open(); 
       var manualSourcesCodes = connection 
        .Query<SourceCodeList>("select source_cd, source_desc where feeder_system_cd = 'ME'") 
        .ToList(); 
       return manualSourcesCodes; 
      } 
     } 
    } 

public class BaseController : Controller 
{ 
    [Inject] 
    public IParisConnectionStringBuilder _connectionStringBuilder { get; set; } 
    // ... 
} 

答えて

3

私はあなたの質問が何であるかを理解して100%ではないです。

ただし、アプリケーション全体でIParisConnectionStringBuilderのインスタンスを1つだけ必要とする場合は、NInjectでシングルトンとして登録することを検討してください。問題を解決し

Bind<IParisConnectionStringBuilder>().To<ParisConnectionStringBuilder>().InSingletonScope(); 
+0

おかげで、:

構文は次のようなものです! InSingletonScope()を使用してIPContextConnectionStringBuilderの具体的な実装をBaseControllerクラスに挿入し、同じインスタンスがすべてのビジネスレイヤークラスのコンストラクターに渡されるようにします。 – Abe

関連する問題