确保给定 COM 可见的 .NET 组件的所有实例共享一个 AppDomain

发布于 2024-11-07 11:53:46 字数 84 浏览 0 评论 0原文

我计划公开一个带有 COM 接口的 .NET 组件,并且我希望 .NET 类的所有实例共享一个应用程序域。

实现这一目标的最佳方法是什么?

I am planning to expose a .NET component with a COM interface, and I would like all the instances of the .NET class to share a single Application Domain.

What would be the best way of achieving that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖树树初阳… 2024-11-14 11:53:46

如果可能的话,这并不容易。

在已知的 AppDomain 很容易(例如 Activator.CreateInstance 重载需要一个 AppDomain 引用),问题将是获取对目标 AppDomain< 的引用/代码>。

创建 AppDomain 并在当前 AppDomain 内共享该引用非常简单:静态 字段或属性。

将该引用共享给第三方代码创建的其他 AppDomain 是一个问题。我似乎记得 BCL 的某些部分确实跨域共享静态数据(本质上,它们每个进程都有一个实例,而不是每个 AppDomain,但这种机制通常无法被其他程序集访问。

它可能更好了解为什么您希望能够做到这一点:对于您的根本问题可能有更好的解决方案:为什么您希望所有实例都在一个 AppDomain 中?

If it is possible it will not be easy.

While creating an instance of a type in a known AppDomain is easy (eg. Activator.CreateInstance overload that takes an AppDomain reference), the problem will be getting the reference to the target AppDomain.

Creating the AppDomain and sharing that reference within the current AppDomain is easy: a static field or property.

Sharing that reference to other AppDomains created by third party code is a problem. I seem to recall parts of the BCL do share statics across domains (essentially they have a single instance per process rather than per AppDomain, but this mechanism isn't generally accessible to other assemblies.

It is probably better to understand why you want to be able to do this: there is probably a better solution to your underlying problem: why do you want all instances in a single AppDomain?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文