.NET封装DLL如何实现单例?

Mars.CN 2018-11-01 04:28:02
有一个需求,要做一个DLL库实现与服务器的通讯,但要求是本机中只允许启动一次DLL的通讯类
会有多个程序用到这个DLL与服务器通讯,但用到的都是同一个实例
程序在加载DLL的时候,如果发现已经有其他程序利用本DLL创建了服务器连接,则直接用这个连接,而不需要再次创建
就是做一个进程外的DLL单例,这个用.NET如何实现?
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2018-11-02
  • 打赏
  • 举报
回复
多个客户端调用dll。 那么多个dll如何通讯来确认单例模式? 还不是要dll访问一个平台或者服务,让平台或者服务来告诉其他dll调用者
  • 打赏
  • 举报
回复
“只允许启动一次DLL的通讯类,会有多个程序用到这个DLL与服务器通讯”这类话本身就是自相矛盾反反复复在一起纠结互搏。你起码要放弃一头,才能基本上逻辑可行。只有逻辑上通顺了,才值得继续研究。
  • 打赏
  • 举报
回复
引用 7 楼 suolong123 的回复:
我的意思是不管谁加载DLL到内存中,DLL代码永远只有一份,就是在内存中形成一个单态的操作,所有的程序都会调用这个单态执行,不知道能不能行得通
DLL 就是一个二进制文件,不是一个内存中的什么单独进程。DLL 被调用,就是在父程序的进程中加载这个DLL代码然后开始执行,何来的“所有的程序都会调用这个单态执行”呢?这里的“单态执行”完全就是不存在的分离概念。不存在东西就应该先放弃。
圣殿骑士18 2018-11-01
  • 打赏
  • 举报
回复
这是什么奇葩需求,都不知道你要干什么。
你还是把你想实现的业务需求说出来,而不是说技术需求,让大家看看你这个伪需求是怎么产生的。
Mars.CN 2018-11-01
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
[quote=引用 4 楼 sp1234 的回复:]
DLL只是文件。你难道以为 DLL 是内存中的进程或者别的对象?


比如说我们的一个进程要跟 QQ 进程交互通讯,这是正规概念。假设你说我们的进程要跟 QQ 二进制安装文件(当作QQ)来交互通讯,这就把原本非常简单的到处都是实例的进程之间通讯给弄的诡异了。[/quote]

不太懂DLL,刚接触.NET开发,见笑了。
我的意思是不管谁加载DLL到内存中,DLL代码永远只有一份,就是在内存中形成一个单态的操作,所有的程序都会调用这个单态执行,不知道能不能行得通
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
DLL只是文件。你难道以为 DLL 是内存中的进程或者别的对象?
比如说我们的一个进程要跟 QQ 进程交互通讯,这是正规概念。假设你说我们的进程要跟 QQ 二进制安装文件(当作QQ)来交互通讯,这就把原本非常简单的到处都是实例的进程之间通讯给弄的诡异了。
  • 打赏
  • 举报
回复
引用 0 楼 suolong123 的回复:
就是做一个进程外的DLL单例,这个用.NET如何实现?
进程就是进程,进程间通讯也是进程之间的通讯。并不存在什么“进程外的DLL”,这就好像是把二进制文件跟内存里活生生的程序实例等同起来是混乱了一样,就不会有直接设计结果了。
  • 打赏
  • 举报
回复
DLL只是文件。你难道以为 DLL 是内存中的进程或者别的对象?
Mars.CN 2018-11-01
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
建立个服务,然后所有需要用到该功能的程序都通过服务访问

有道理,试试看

多谢
  • 打赏
  • 举报
回复
建立个服务,然后所有需要用到该功能的程序都通过服务访问
Mars.CN 2018-11-01
  • 打赏
  • 举报
回复
补充解释一下:
比如有A、B两个程序都调用这个DLL,在DLL中有个类ClassC
A程序调用ClassC.ID=10
在B程序中读取ClassC.ID,应该能读到10的返回值

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧