两个应用程序加载相同的.NET程序集:同一实例

时间:2010-09-30 21:12:10

标签: .net assembly-loading

1).NET程序集 MyAssembly.dll 实现了一个Singleton类 MyClass

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

3).NET ActiveX MyActiveX.dll 实现了一个COM Visible类,它反过来引用 MyAssembly.dll中的 MyClass

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

由于

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

将程序集加载到Application Domain中,每个Application Domain实例化静态字段(单例所在的位置)。每个进程至少有一个App Domain,因此每个进程至少有一个实例。

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

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