Sparx EA.App неправильно отражает Activator.CreateInstance - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть консольное приложение .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 голосов
/ 08 декабря 2018

Если вы хотите создать новый экземпляр, выполните что-то вроде этого

 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;
...