Sparx EA.App 没有正确反映 Activator.CreateInstance
Sparx EA.App doesn't reflect Activator.CreateInstance properly
我有 .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();
}
如果您想创建一个新实例,请执行以下操作
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;
我有 .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();
}
如果您想创建一个新实例,请执行以下操作
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;