2

1) .NET Assembly MyAssembly.dll实现了一个 Singleton 类MyClass

2) .NET APP 引用了MyAssembly.dll并使用MyClass

3) .NET ActiveX MyActiveX.dll实现了一个 COM Visible 类,该类又引用MyAssembly.dll中的MyClass

我的问题是:如果应用程序和 ActiveX 同时运行(网页中的 ActiveX),我是否加载了一个或两个MyAssembly.dll实例?我需要它成为单例工作的一个实例。

谢谢

4

2 回答 2

0

您将有两个实例,它们在不同的进程中运行。

如果您需要一个通过 ActiveX 控件访问的单例,我建议创建一个 WCF 服务来托管您的单例对象并提供访问权限。然后,您可以编写一个访问服务以支持您的 ActiveX 控件的小型 COM 可见客户端。

于 2010-09-30T21:26:19.557 回答
0

程序集被加载到应用程序域中,静态字段(单例所基于的)在每个应用程序域中实例化。每个进程至少有一个 App Domain,因此每个进程至少有一个实例。

您的 ActiveX 组件在另一个进程中实例化,然后是 .NET 应用程序。你没有共享内存。

要仅将单例实例化一次,您需要启动一个进程并远程访问它。您可以通过使用远程处理、DCOM、WCF 或类似的东西来实现这一点。您需要确保两个进程都访问此实例。

于 2010-09-30T21:29:24.983 回答