我正在开发一个asp.net MVC应用程序。
该应用程序的结构如下:
数据层使用LinqToSql查询sql数据库。
当用户登录应用程序时,根据用户名,我可以进行查找以检查他们属于哪个组织。根据组织,数据库会发生变化。也就是说,如果用户组织为1,则应使用DB01,或者如果用户组织为2,则为DB02。
两个用户都有他们使用的公共数据库。
我的问题是,如何自动选择目标数据库。我的想法是从服务层执行此操作。初始化Data类时,我会将连接字符串传递给目标DB。
但要做到这一点,我必须将当前处于活动状态的用户令牌作为参数传递给服务层,即org id / etc,以便服务知道这一点。
在Web项目中,我使用IModelBinder来绑定令牌,将其存储在会话中。
有没有一种方法可以将Imodelbinder对象传递给服务层或我可以使用的任何其他方法。
我想放弃通过方法参数传递这些值。
答案 0 :(得分:1)
由于问题被标记为 dependency-injection (DI),我认为DI已经在使用,并且数据访问组件(DAC)正在注入控制器。
与DI一样,能够通过业务逻辑改变注入依赖关系的关键是引入抽象工厂并注入而不是原始组件。
在您的情况下,它可能看起来像这样:
public interface IRepositoryFactory
{
IRepository Create(string userName);
}
您之前注入IRepository实例的地方,现在可以注入IRepositoryFactory,然后使用userName
获取相应的DAC。
答案 1 :(得分:0)
请求数据库连接字符串也可以是服务