我们可以有一个.exe用XAML和Prism(用于MVVM)调用.dll吗?

时间:2019-03-28 00:29:07

标签: prism

我的问题是:我如何才能从另一个仅以“ EXE”运行的项目中调用包含我所有XAML(视图)和ViewModel类的库项目(DLL)? (我想将Prism 7用于MVVM)。

我的意图是拥有一个项目,其唯一目的是创建一个.EXE。该EXE将加载实际WPF视图和视图模型所在的程序集。

理想情况下,我想在EXE项目中使用App.xaml ...但是我想在组装项目中使用Bootstrapper ... Prism 7可以吗?

我想在“ Company.Product.Application”项目(产生一个EXE)中拥有一个App.xaml:

         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>

然后从我的Bootstrapper中,我想加载我的IoC并创建我的视图和视图模型。

我已经可以使用Caliburn.Micro完成此任务。这里的想法是,可以测试“ Company.Product.Presentation” DLL,而无需自己创建EXE。我可以在测试项目(NUnit)中添加对“演示文稿”的引用,并对其进行独立测试。 EXE只是一个项目,它调用“ Company.Product.Presentation” DLL来实际生成图形用户界面。

非常感谢您对这个问题有任何见解。谢谢!

1 个答案:

答案 0 :(得分:0)

  

但是我想将我的Bootstrapper放在Assembly项目中... Prism 7可以吗?

当然,只需使用exe中的引导程序引用dll,然后在App.xaml.cs中放入类似内容:

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