.net - 需要单例 COM 对象

标签 .net com clr

是否可以创建 COM 对象的单个实例,并确保来自任何客户端的所有后续调用都只对这个单个实例进行?

最佳答案

请注意,您必须使 COM 对象在进程外运行(由 EXE 公开)。

您真的需要到处都使用的完全相同的 COM 对象吗?还是只想从单个控制点控制相同的底层资源?

COM 不直接支持单例模式,但也没有严格禁止。只是没有注册表设置说“始终为相同的对象提供服务”。实际上,标准的 COM 实例化机制要求每次调用时都返回一个真正的新对象(这种机制是 new 运算符和 CreateInstance() 内部使用的机制)。这意味着要制作一个合适的 COM 单例,您不能让您的客户自己创建它。这一切都可以完成,但它很棘手,而且很少需要。

你最好的选择 - 足够有趣 - 根本没有 COM 单例。让客户端根据需要创建尽可能多的不同对象。代替单个 COM 对象,允许多个 COM 对象,但使这些对象与单个内部对象实现通信的“垫片”。根本不要将内部单例实现直接公开为 COM 对象。您将避免很多头痛。

关于.net - 需要单例 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252334/

相关文章:

.net - 成员(member)提供商 - 仅连接到默认提供商?

c++ - 如果自定义凭据提供程序无法进行任何身份验证,如何返回到 CTRL+ALT+DELETE 登录页面?

c# - 将相当简单的 C# 类库转换为 COM 对象?

c# - 有关内存中转换的 C# 引用类型的信息

c# - 多个程序集中相同的完全限定类名

.net - 学习应用程序编程的最佳资源? (.Net/ cocoa /等)

c# - .Net C# TcpClient/Socket HTTP 客户端性能/效率

c# - 如何从资源中获取文件作为流? (。网)

c# - 注册免费 COM 与 C# 互操作,可能吗?

c# - 如何在 C# 中编码(marshal) IntPtr 的异常