我有.NET Framework 4.6.2控制台应用程序,该应用程序正在访问Sparx Enterprise Architect存储库。下面的代码显示了一个使用Activator.CreateInstance()的简单示例。问题在于,当创建第二个实例时,将使用当前实例(存储在eaApp中),因此我无法访问两个不同的存储库。这个问题有什么机智的解决方案吗?
static void Main(string[] args)
{
EA.App eaApp = (EA.App)Activator.CreateInstance(Type.GetTypeFromProgID("EA.App", true));
EA.App eaApp2 = (EA.App)Activator.CreateInstance(Type.GetTypeFromProgID("EA.App", true));
eaApp.Repository.OpenFile(@"c:\Temp\UCI2.EAP");
eaApp2.Repository.OpenFile(@"c:\Temp\UCI3.EAP");
EA.Element test = eaApp.Repository.GetElementByGuid("{53F2ADAE-E8AC-40da-A06F-D64F525B87E8}");
EA.Element test2 = eaApp2.Repository.GetElementByGuid("{DBF0459F-0662-4e5b-B7E3-A065087B624E}");
Console.WriteLine($"test1: {test.Notes} test2: {test2.Notes}");
Console.ReadKey();
}
答案 0 :(得分:1)
如果您要创建新实例,请执行以下操作
EA.Repository r = new EA.Repository();
r.OpenFile("c:\\eatest.eap");
中所述
可以通过以下方式连接到(第一个)正在运行的实例:
using System.Runtime.InteropServices;
...
object obj = Marshal.GetActiveObject("EA.App");
var eaApp = obj as EA.App;
var myRepository = eaApp?.Repository;