在类库项目中创建类似App.xaml.cs的类

时间:2016-08-29 19:26:08

标签: c# wpf

最近;我将Views重构为他们自己的WPF Application项目,并将我的ViewModel类移到他们自己的类库项目中。这很适合保持我的代码有序。然后我意识到我没有App.xaml.cs课程的安慰。

这个类(对我而言)意味着我可以声明各种对象并在应用程序范围内访问它们。

即:在App.xaml.cs

public partial class App : Application
{
    public myDatabaseEntities context { get; set; }

    // App.xaml.cs Constructor
    public App()
    {
        context = new myDatabaseEntities();
    }
}

在一些随机视图模型中:

myDatabaseEntities context = ((App)Application.Current).context;

上面允许我重新编写实例,并且特别方便使用Unity的终身经理Unity(IoC容器)版本。

事实上,我不确定如何在类库项目中实现此行为。我不确定如何创建一个在运行时实例化的类。我不知道如何将App类实例传递给相关的类。关于如何做到这一点的任何想法?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

就个人而言,我会将所有“功能”相关的视图和ViewModel保持在一起(彼此相邻)。您可能希望基于应用程序的不同功能部分创建类库(或模块)。另外,请参阅此MSDN页面,了解如何使用WPF和Prism构建复合应用程序。

回到你的问题,有一个名为IApplication的界面定义如下:

public interface IApplication
{
    MyDatabaseEntities Context { get; }
}

并在App类上实现该接口:

public partial class App : Application, IApplication
{
    public MyDatabaseEntities Context { get; set; }

    // App.xaml.cs Constructor
    public App()
    {
        Context = new MyDatabaseEntities();
    }
}

在App.xaml.cs中,作为引导应用程序的一部分,通过在Unity容器上调用App扩展方法向容器注册此RegisterInstance实例:

Container.RegisterInstance(typeof (IApplication), this, new ContainerControlledLifetimeManager());

现在,如果您的ViewModel依赖于IApplication,那么他们将可以通过此接口访问您的App对象和Context属性。将来,您可以通过此界面从Dispatcher对象中公开其他属性,例如:ResourcesApp等。

答案 1 :(得分:0)

原来我需要的是没有xaml前端的常规课程。然后继承Application类。最后将其设置为app.xaml.cs的基类。答案已经是here