最近;我将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
类实例传递给相关的类。关于如何做到这一点的任何想法?任何帮助将不胜感激。
答案 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
对象中公开其他属性,例如:Resources
,App
等。
答案 1 :(得分:0)
原来我需要的是没有xaml前端的常规课程。然后继承Application类。最后将其设置为app.xaml.cs的基类。答案已经是here