SQLHelp类中的方法,原来数据库连接字符串(SqlCon)是静态的,从config文件中获取,现在我要将他改为动态的,从cookie或者session 中获取。
如果,在每个方法里,添加一个参数用来传递SqlCon,就会很麻烦。
另外SQLHelp 在三层中DAL层里面,调用不了 cookie
自己写一个静态类,通过这个静态类来获取连接字符串。
通过这个静态类去读Cookie、Session之类的数据。
因为是面对多用户,如果用静态类的应该不行吧。主要是DAl层获取不了cookie。或者有没有一种方法,为其他方法新增一个参数
@亦有哭亦有笑: 静态类是起到一个代理作用,而不是在静态类里写死。
你的DAL不能处理cookie,这个简单,你可以在DAL里定义一个获取连接字符串的接口,比如:IConnectionStringService,然后通过获取这个接口的实现服务(简单的,可以使用IServiceProvider)来获取,而你的接口的实现则可以放在表示层,只要把表示层实现的接口服务添加到IServiceContainer里就好了。
DAL->ConnectionStringSingleton->IConnectionStringService
|
ServiceContainer
|
UI->ConnectionStringService->Session/Cookie
这个,也叫依赖注入,你可以多了解下依赖注入技术。
@519740105: 按照你的方法 ,我在DAL定义了接口
interface IConnectionStringService { string getValue(); }
在UI层实现接口
public class ConnectionStringSingleton : IConnectionStringService
{
private string strCon=System.Web.HttpContext.Current.Session["strCon"].ToString();
public string getValue()
{
return strCon;
}
}
提示“
错误 50 “DAL.IConnectionStringService”不可访问,因为它受保护级别限制
”,我是不是还少了什么啊
@亦有哭亦有笑:
interface IConnectionStringService
修改为
public interface IConnectionStringService
@519740105:
我在DAL层调用的时候
IConnectionStringService iss = new IConnectionStringService();
string connectionStrings = iss.getValue();
提示“无法创建抽象类和接口的实例”,在DAL层里面该怎么调用呢
@亦有哭亦有笑:
看你又哭又笑的~~~
接口怎么能new呢?
解决这个问题的方案
1、在UI层:使用ServiceContainer:ServiceContainer.AddService
2、在DAL层:使用IServiceProvider:IServiceProvider.GetService
另外一个方案:
1、在Dal里的ConnectionStringSingleton里,定义一个全局静态变量,类型为 IConnectionStringService
2、在UI层(可以是Global的ApplicationStart事件里)对上面的属性赋值,即把你在UI层实现的IConnectionStringService接口的类实例化后赋值过去。
@519740105:
面向多用户的,第二个方案应该不行吧。第一个方案还是不懂。我就想DAL获取cookie的值(多用户),还是贴代码吧。。。。。。。。。
@亦有哭亦有笑: 放心,行的,只要你在ConnectionStringService里实现多用户功能就OK了。
@519740105:
弄晕 了 能不能直接放代码,在DAL中调用 cookie(strCon)
@亦有哭亦有笑: 诶,都跟你说很清楚了,朋友,基础啊!忙呢,上代码是要时间和精力的。
@519740105:
网上 也查了一些资料,还是不会写,要是有时间的话,就辛苦写一下。
我也继续努力。。。。
1、构造函数可以传值的,从controller-bll-dal。
2、在dal中也是能够拿到当前HttpContext的,多线程下失效。
多配几个放到webconfig里面啊,怎么可以将字符串放到cookie,被别人看到怎么办?还有session,丢失怎么办?
因为有多个服务器(动态,不确定),他们的数据库结构相同,只是数据内容不同。怎么放config
@亦有哭亦有笑: 对多个数据库做集群啊,数据不多的话,使用一个数据库负责汇总其他的数据,用来单独做查询。
把数据库连接字符串放到COOKIE或者SESSION感觉这样的设计就有问题,你最好换个方式去实现你的这个功能。
不就是多了几个字符串吗?在WEB.CONFIG多配几个,再根据情况去选择使用哪个。