WinUI3项目中FirstPage如何访问App类中声明的对象?
WinUI3中访问App类对象的常用方式
已知你提到的将App类成员声明为静态成员是一种可行方法,除此之外还有以下几种实用方式:
1. 静态成员访问法
直接在App类中把需要共享的对象声明为静态成员,示例代码如下:
public sealed partial class App : Application { // 声明静态成员对象 public static MySharedObject GlobalSharedObj { get; set; } = new MySharedObject(); // 其他App类逻辑代码 }
在FirstPage中直接通过类名访问该静态对象:
var targetObj = App.GlobalSharedObj;
2. 获取App实例访问非静态成员
如果不想使用静态成员,可以通过Application.Current获取当前App的实例,再强转为自定义的App类型,从而访问非静态成员:
public sealed partial class App : Application { // 声明非静态成员对象 public MySharedObject InstanceSharedObj { get; set; } = new MySharedObject(); // 其他App类逻辑代码 }
在FirstPage中的访问代码:
var currentApp = (App)Application.Current; var targetObj = currentApp.InstanceSharedObj;
3. 依赖注入法(推荐)
对于架构更规范的项目,推荐用依赖注入来传递对象,避免页面与App类直接耦合:
- 在App的
OnLaunched方法中注册服务:
protected override void OnLaunched(LaunchActivatedEventArgs args) { var serviceCollection = new ServiceCollection(); // 注册单例对象 serviceCollection.AddSingleton<MySharedObject>(); var serviceProvider = serviceCollection.BuildServiceProvider(); // 初始化窗口和页面时,从容器获取对象并传入 var rootFrame = new Frame(); rootFrame.Navigate(typeof(FirstPage), serviceProvider.GetService<MySharedObject>()); // 其他窗口初始化逻辑 }
- 在FirstPage构造函数中注入该对象:
public FirstPage(MySharedObject sharedObj) { this.InitializeComponent(); // 直接使用注入的sharedObj }
内容的提问来源于stack exchange,提问作者yonutix
相关产品推荐
相关产品推荐

