如何在类库中判断当前的程序类型是Windows的和是Web的?

zahuifan 2006-05-08 01:59:12
我现在想把业务对象层的代码放在一个类库项目中。由于有些操作对于Windows程序和Web程序是不同的,例如对于单件类的实体,如果是Windows程序可以存放在一个静态对象中(private static _singletonInstance = null);而如果是Web程序,要放在Session中(HttpContext.Current.Session["StudentSingletonInstance"] = aObject).

所以我想在类库中判断当前使用此类库的程序是Web的还是Windows的。如何实现?

我想到了一个比较笨的方法,在此抛砖引玉:

可以判断当前使用的配置文件名,如果是“Web.config”,就说明是Web程序,函数为:
private static string configFileName
{
get
{
// the configFileFullName will like "E:\VS2005\WebSites\MyRDLCDemo\web.config"
string configFileFullName = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

// the configFileFullNameArray will like {'E:', 'VS2005', 'WebSites', 'MyRDLCDemo', 'web.config'}
string[] configFileFullNameArray = configFileFullName.Split(new Char[] { '\\' });

if (configFileFullNameArray.Length > 0)
{
// it returns like "web.config"
return configFileFullNameArray[configFileFullNameArray.Length - 1];
}

return "";
}
}
...全文
168 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zahuifan 2006-05-08
感谢大家的回答。明天结帖,那位还有高见?

确实,如果是一般的对象,可以在Web程序中创建Web系列的对象,在Windows程序中创建Windows系列的对象;在类库中的代码可以针对接口编程。但是单件类就不能如此实现。
回复
deadshot123 2006-05-08
如果你需要的对象是在每一个页面中只能有一个的话
根据我的理解 根本不算是Singleton pattern
回复
Knight94 2006-05-08
to 而且单件类要的就是可以不考虑调用顺序的全局访问点这一方便特性。如果在调用端告诉类库程序的类型的话,在什么时机呢?在Page_Init中么?每个页面都写么?

那就是你类库设计的问题了,既然函数要根据不同的调用端来做不同的处理,那么你在实现的时候,要么分成不同的函数来实现,要么就加上参数来标明。
回复
zahuifan 2006-05-08
to viena():

您说的很对。类库不应该知道调用它的是什么程序。可是如何在类库中写单件类呢?如果把单件对象放到 static object中,那么在Web程序中就会变成Application范围的,而不是Session范围的,而我们经常需要的恰恰是Session范围的。
回复
zahuifan 2006-05-08
to 1、3、4搂的:

在调用端告诉类库是什么类型的程序就不麻烦?

而且单件类要的就是可以不考虑调用顺序的全局访问点这一方便特性。如果在调用端告诉类库程序的类型的话,在什么时机呢?在Page_Init中么?每个页面都写么?
回复
通过
Process.GetCurrentProcess().ProcessName
判断
回复
viena 2006-05-08
类库就是类库,提供功能而已,它根本就不该知道调用它的是什么程序
界面层对于业务逻辑层是透明的,否则会造成混乱
控制台程序也可以调用类库的,比如用控制台程序进行测试
回复
webwait 2006-05-08
mark
回复
viena 2006-05-08
同意楼上,类库中判断,逻辑不通
回复
Knight94 2006-05-08
我觉得比较简单是调用端主动告诉它是什么类型的,如果在底层去判断,你需要在每个函数都要去判断,效率先不说,处理多麻烦。
回复
shalen520 2006-05-08
关注
回复
软件微工厂 2006-05-08
我认为还是应该查一下有没有对Assambly直接可以判断的方法,或者写到Assambly;或者写入配置文件到配置文件中取会比较好一些;
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.