我正在开发一个基于codeplex EFMVC解决方案的MVC网站,我正在使用实体框架和存储库,工作单元和命令模式。我的网站需要成为SaaS解决方案(软件即服务)的多个数据库。 在我的遗留Asp.Net WebForms中,我有一个XML文件,它包含所有不同的字符串连接,我正在尝试使用相同的策略。所以在我的LoginController中,我创建了一个命令,该命令包含公司(用于识别将连接的数据库)用户名和密码。在Domain项目的Validate()方法中,我正在读取XML以根据公司字段获得正确的字符串连接。我的问题是我如何设置DatabaseFactory或DbContext来使用这个选定的连接字符串?它应该在构造函数中注入?是否有任何建议以正确的方式做到这一点,而不是“违反规则”?
请注意,我正在使用AutoFac进行依赖注入。
感谢您的关注。
祝福,
Luiz Fernando Vall Dionizio
答案 0 :(得分:0)
您可以使用Autofaq的ResolveNamed功能为同一界面进行不同的注册 例如:
builder.Register<IDataContext>(x => new DataContext(connectionStringOne))
.Named<IDataContext>("CS1");
builder.Register<IDataContext>(x => new DataContext(connectionStringTwo))
.Named<IDataContext>("CS2");
并解决它
var context = ContainerAccessor.Container().ResolveNamed<IDataContext>("CS1");
另一种方法是覆盖DataContext ctor并从该请求的共享位置读取配置。