Sparx EA.App无法正确反映Activator.CreateInstance

时间:2018-12-07 21:50:02

标签: c# enterprise-architect

我有.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();
}

1 个答案:

答案 0 :(得分:1)

如果您要创建新实例,请执行以下操作

 EA.Repository r = new EA.Repository();

 r.OpenFile("c:\\eatest.eap");

manual

中所述

可以通过以下方式连接到(第一个)正在运行的实例:

using System.Runtime.InteropServices;
...
object obj = Marshal.GetActiveObject("EA.App");
var eaApp = obj as EA.App;
var myRepository = eaApp?.Repository;