1

我有一个连接到单个 MYSQL 数据库的小型 MVC 应用程序。我使用 Ninject 设置它以在应用程序启动期间绑定 connectionString。代码如下所示:

全球.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 回答