继承自"应用程序"在wpf应用程序中

时间:2018-02-22 16:32:40

标签: c# wpf

我目前正在WPF中构建一组应用程序,他们将使用Prism作为框架。

他们将有很多共同之处,我的应用程序之间唯一会改变的就是将在Prism地区加载的内容。

所以我想提出一些共同点。

我没有成功的一件事是制作一个共同的应用程序"所有共同部分的实施:

目标是:

  

应用程序< - BaseApp(摘要)< - MySpecificAppplication(仅限代码)

目标是在BaseApplication中共享每个资源声明,共同的OnStartup实现,以及在最终类中只有特定部分(在我的情况下,我想运行哪个Bootstrapper)。

以下是一些代码:

public abstract partial class BaseApp : Application //This class has also some XAML for resources loading, but pretty basic.
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        BaseBootstrapper clientBootstrapper = GetBootstrapper();
        //Some initialization stuff
        clientBootstrapper.Run();//This will cause Prism to load the correct first View(shell)
    }
    protected abstract BaseBootstrapper GetBootstrapper();
}

具体实施

public  class MySpecificApp : BaseApp
{
    protected override BaseBootstrapper GetBootstrapper(){
        return //something ;
    }
}

但是我建立了,我收到了一个错误:

  

程序不包含静态' Main'适合入境的方法   点

支持吗?

1 个答案:

答案 0 :(得分:0)

使用默认模板在Visual Studio中创建新的WPF应用程序时,会得到一个继承自App的{​​{1}}类。

编译器为您添加System.Windows.Application方法,在此方法中创建Main()类的实例,并调用InitializeComponent()方法来解析XAML调用Run()方法来启动应用程序。

如果您愿意,可以自己添加定义App方法:

Main()

但显然你无法创建一个抽象类的实例。因此,如果[System.STAThreadAttribute()] public static void Main() { App app = new App(); app.InitializeComponent(); app.Run(); } 包含XAML,则不应将其定义为抽象类。

替代方法是将XAML和BaseApp方法移动到Main()类,并在MySpecificApp方法中创建此实例。