需要Singleton COM对象

时间:2011-06-06 12:56:09

标签: .net com clr

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

1 个答案:

答案 0 :(得分:8)

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

你真的需要在任何地方使用相同的COM对象吗?或者只是想从单个控制点控制相同的底层资源?

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

你最好的选择 - 足够有趣 - 是根本没有COM单身人士。让客户端创建任意数量的不同对象。而不是单个COM对象,允许多个COM对象,但使这些对象“垫片”与单个内部对象实现进行通信。不要将内部单例实现直接公开为COM对象。你会避免很多麻烦。