Как разработать объектную модель общедоступного API в настольном приложении WPF, которая позволяет выполнять внешнюю автоматизацию из другого настольного приложения .NET - PullRequest
0 голосов
/ 26 января 2010

Мы разрабатываем большое настольное приложение с использованием Windows Presentation Foundation. В настоящее время приложение предназначено для внутреннего использования, но в конечном итоге будет продаваться как коммерческий продукт. В настоящее время я использую вариант шаблона проектирования M-V-VM, чтобы сохранить как можно больше кода от компонентов пользовательского интерфейса (т.е. окон, пользовательских элементов управления). Я знаю, что в какой-то момент мы захотим предоставить общедоступный API, чтобы позволить клиентам расширять приложение, и, возможно, даже автоматизировать приложение вне процесса, используя общедоступный API из другого приложения .NET. У меня нет большого опыта разработки общедоступного API для настольного приложения, поэтому я ищу любую информацию, касающуюся лучших практик.

Ниже приведены некоторые мои вопросы:

1) Как мне спроектировать приложение WPF, чтобы его можно было автоматизировать вне процесса из другого приложения .NET, работающего в своем собственном процессе? Например, скажем, у клиента запущено консольное приложение, и он хочет автоматизировать открытие приложения WPF, а затем открыть определенное окно в приложении WPF. Я не уверен, как это можно сделать. Если у меня запущено консольное приложение, и я пытаюсь создать новый экземпляр своего приложения WPF с помощью кода, я получу следующую ошибку: «Невозможно создать более одного экземпляра System.Windows.Application в одном домене приложений». Я понимаю, что эта ошибка возникает из-за того, что консольное приложение не позволяет запускать приложение WPF в своем текущем домене приложений, но я действительно хочу, чтобы приложение WPF запускалось в своем собственном процессе, в то время как консольное приложение .NET контролирует его через открытый API .

2) Я понимаю, что то, что я спрашиваю, чем-то похоже на автоматизацию Excel, которая использует COM +, чтобы позволить Excel работать вне процесса. Тем не менее, Excel написан в неуправляемом коде, и наше приложение WPF, очевидно, на 100% управляемый код. Действительно ли мне нужно прибегнуть к COM +, чтобы разрешить внешнее управление настольным приложением WPF через публичную объектную модель API из другого приложения .NET?

3) Если я хочу разрешить автоматизацию моего приложения с помощью общедоступного API, стоит ли мне изучать .NET Remoting? Или .NET Remoting считается устаревшим?

4) Я хорошо понимаю, как разрешить использование динамических надстроек, которые загружаются во время выполнения. Однако мне все еще нужно иметь открытый API, который код в надстройках может использовать для управления приложением WPF. Каковы хорошие ресурсы по разработке API для настольных приложений?

Я ценю любые отзывы. Было очень трудно найти информацию о разработке настольного приложения .NET с общедоступным API, который позволяет автоматизировать работу другого приложения .NET.

Спасибо, Крис.

1 Ответ

0 голосов
/ 26 января 2010

Да, модель автоматизации Office по-прежнему является основным способом реализации внепроцессной автоматизации. Больше всего потому, что это поддерживает практически любой язык. Это не так просто реализовать в .NET, он не поддерживает внепроцессную активацию COM из коробки. Начните , читая здесь , чтобы узнать, как это сделать с помощью COM +.

Да, удаленное взаимодействие, безусловно, будет работать, если ваш клиент является приложением .NET. Он не совсем устарел, но фактически заменен WCF.

...