1
我有一個連接到單個MYSQL數據庫的小MVC應用程序。我在Ninject中設置了在應用程序啓動過程中綁定connectionString。該代碼是這樣的:MVC - 使用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的新手,所以任何示例都將非常感謝!
一如既往,感謝您的時間和幫助! 。
所以上述情況,綁定到SessisionConnectionProvider將不會在開始時返回任何內容,因爲會話變量不會在用戶登錄後才設置。請問這仍然有效嗎? 換句話說,是否「綁定()。ToProvider ();」代碼對用戶訪問的每個頁面執行?對不起 - 我是Ninject和DI的新手,並努力讓我的頭腦對這些概念有所瞭解。謝謝! –
Bind()僅在應用程序啓動時執行一次,它僅創建Binding(Ninject的配置)。一旦應用程序運行,並且請求頁面,Ninject會在任何時候執行提供程序IRiskRepository被請求。如果未經認證的頁面不要求它,它將不會嘗試創建它。你可能想要添加一個檢查來確保會話有連接字符串,如果沒有則拋出異常。 –