1

単一の MYSQL データベースに接続する小さな MVC アプリケーションがあります。アプリケーションの起動時にconnectionStringをバインドするために、Ninjectでセットアップしました。コードは次のようになります。

Global.asax.cs:

protected void Application_Start()
{ 
... 
   ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 
}

NinjectControllerFactory.cs:

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
... 
   private class EriskServices : NinjectModule 
    { 
       public override void Load() 
       { 
                // Bind all the Repositories  
                Bind<IRisksRepository>().To<MySql_RisksRepository>() 
                    .WithConstructorArgument("connectionString",  
                    ConfigurationManager.ConnectionStrings["dbcMain"]
                    .ConnectionString); 
       } 
    } 
}

今日、要件が変更され、複数のデータベースをサポートする必要が生じました。以前のように、各データベース接続文字列を web.config ファイルで定義したいと思います。ユーザーは、アプリケーションのログイン中に接続するデータベースを選択します。

ログイン後にリポジトリをバインドする最も簡単な方法は何ですか? ログイン コントローラーでデータベース バインドをコーディングする必要があると思います。

私はNinjectの初心者なので、どんな例でも大歓迎です!

いつものように、時間と助けをありがとう! .

4

1 に答える 1

1

おそらく、リポジトリを にバインドしてNinject.Activation.IProviderから、Session から connectionString をプルする独自のプロバイダーを作成します。

Bind<IRisksRepository>().ToProvider<SessionConnectionProvider>();

それから...

public class SessionConnectionProvider : Ninject.Activation.IProvider
{
    #region IProvider Members

    public object Create( Ninject.Activation.IContext context )
    {
        // use however you're accessing session here
        var conStr = session.ConnectionString;
        return new MySql_RisksRepository( conStr );
    }

    public Type Type
    {
        get { return typeof( IRisksRepository ); }
    }

    #endregion
}
于 2011-11-02T20:52:00.493 に答える