0

我正在开发一个基于 codeplex EFMVC 解决方案的 MVC 网站,并且我正在使用实体框架和存储库、工作单元和命令模式。我的网站需要是一个 SaaS 解决方案(软件即服务)多个数据库。在我的旧版 Asp.Net WebForms 中,我有一个 XML 文件,其中包含所有不同的字符串连接,我正在尝试使用相同的策略。因此,在我的 LoginController 中,我创建了一个包含公司(以识别将连接到哪个数据库)用户名和密码的命令。在 Domain 项目中的 Validate() 方法中,我正在读取 XML 以获取基于公司字段的正确字符串连接。我的问题是如何设置 DatabaseFactory 或 DbContext 以使用此选定的连接字符串?它应该在构造函数中注入吗?有什么建议以正确的方式做到这一点,而不是“违反规则”吗?

请注意,我使用 AutoFac 进行依赖注入。

感谢您的关注。

最好的祝愿,

路易斯·费尔南多·瓦尔·迪奥尼齐奥

4

1 回答 1

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 并从该请求的共享位置读取配置。

于 2013-03-12T18:34:32.447 回答