我有一个小MVC应用程序连接到一个MYSQL数据库。我用Ninject设置了它,以便在应用程序启动期间绑定connectionString。代码如下所示:
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);
}
}
}
今天我的需求发生了变化,我现在必须支持多个数据库。我想有每个数据库连接字符串定义在网络。配置文件,就像以前一样。用户在应用程序登录期间选择他们想要连接的数据库。
登录后绑定存储库的最简单方法是什么?我假设我需要在登录控制器中编写数据库绑定代码。
我是Ninject的新手,所以任何例子都会非常感激!
一如既往,感谢您的时间和帮助!.我可能会将存储库绑定到Ninject.Activation.IProvider
,然后创建您自己的提供程序,从会话
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
}