Можем ли мы иметь один .exe, вызывающий .dll с XAML и Prism (для MVVM)?

#prism

#prism

Вопрос:

Мой вопрос заключается в следующем: Как я могу вызвать проект библиотеки (DLL), который содержит все мои классы XAML (Views) и ViewModel из другого проекта, который предназначен для запуска только как «EXE»? (Я хочу использовать Prism 7 для целей MVVM).

Я намерен создать один проект, единственной целью которого является создание .EXE. Этот EXE-файл загрузит сборку, в которой находятся фактические представления WPF и viewmodels.

В идеале я хотел бы иметь App.xaml в EXE-проекте… Но я хочу иметь свой загрузчик в проекте Assembly… Возможно ли это с Prism 7?

Я хочу иметь App.xaml в «Company.Продукт.Проект «Приложение» (который создает EXE):

          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:Company.Product.Application"
         xmlns:Presentation="clr-namespace:Company.Product.Presentation;assembly=Product.Presentation"
         DispatcherUnhandledException="Application_DispatcherUnhandledException"
         xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
        <ResourceDictionary>
            <Presentation:AppBootstrapper x:Key="Bootstrapper" />
        </ResourceDictionary>
</Application.Resources>
  

Затем из моего загрузчика я хочу загрузить свой IoC и создать свои представления и viewmodels.

Я смог выполнить это с помощью Caliburn.Микро… Идея здесь в том, что «Компания.Продукт.Презентация » DLL можно протестировать без необходимости создавать EXE сам по себе. Я мог бы добавить ссылку на «Презентацию» в свой тестовый проект (NUnit) и протестировать его независимо. EXE — это просто проект, который вызывает «Company.Продукт.Презентация » DLL для фактического создания хорошего графического пользовательского интерфейса.

Я ценю любое понимание, которое у вас может быть в отношении этого вопроса. Спасибо!

Ответ №1:

Но я хочу, чтобы мой загрузчик был включен в проект Assembly… Возможно ли это с Prism 7?

Конечно, просто ссылайтесь на dll с помощью загрузчика из exe и поместите что-то вроде этого в App.xaml.cs :

 protected override void Onstartup(StartupEventArgs e)
{
    base.OnStartup(e);
    var bootstrapper = new Company.Product.Presentation.Bootstrapper();
    bootstrapper.Run();
}
  

Комментарии:

1. Большое вам спасибо, Хаукингер. Это действительно было очень полезно!

2. Один быстрый вопрос… Есть ли способ полностью удалить исходный код (MyView.xaml.cs), чтобы в итоге у меня был только файл MyView.xaml? В Caliburn. Микро, я могу полностью удалить исходный код. Что я наблюдаю в Prism, так это то, что если я не оставляю конструктор (с его методом InitializeComponent) в покое, тогда все не привязывается. Это незначительная вещь, но в идеале я бы хотел, чтобы моя команда даже не видела код в файлах просмотра. Еще раз спасибо!

3. Вам не нужно использовать UserControl для вашего представления, вы также можете использовать пользовательский элемент управления. Но я лично просто удаляю все из code-behind, кроме вызывающего конструктора InitializeComponent , и забываю об этом…