#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
, и забываю об этом…