确保给定 COM 可见的 .NET 组件的所有实例共享一个 AppDomain
我计划公开一个带有 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果可能的话,这并不容易。
在已知的
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 anAppDomain
reference), the problem will be getting the reference to the targetAppDomain
.Creating the
AppDomain
and sharing that reference within the currentAppDomain
is easy: astatic
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
?