autofac - Uno 平台视图模型定位器
问题描述
我正在测试 uno 平台解决方案,看看它是否足够灵活,并且可以在其中集成预先存在的 autofac (6.2.0) 和 Autofac.Extras.CommonServiceLocator(6.0.1) 的东西。我想添加 ViewModelLocator 来自动解析视图模型。它适用于 UWP 和 wpf 项目,但不适用于 droid 或 WASM。我在共享 app.xaml 中添加了资源
<Application
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!-- #Region MVM light view model locator -->
<ResourceDictionary>
<local:ViewModelLocator x:Key="ViewModelLocator" d:IsDataSource="True" />
</ResourceDictionary>
<!-- #Endregion -->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
在 mainpage.xaml
DataContext="{Binding [TestViewModel], Source={StaticResource ViewModelLocator}}"
有了这个配置,构造函数在启动时被调用,我还想设置控制反转
public ViewModelLocator()
{
this._container = IOCContainerConfig.Configure();
var serviceLocator = new AutofacServiceLocator(this._container);
ServiceLocator.SetLocatorProvider(() => serviceLocator);
//this._dbContext = serviceLocator.GetInstance<IContext>();
//TestDbConnection(this._dbContext);
}
如前所述,这不适用于 droid 或 wasm 等其他类型的项目,定位器的构造函数从未被调用,但我没有错误,只是加载页面而没有后面的视图模型。
使其适用于所有项目的任何想法或提示?
解决方案
根据资源的类型,Uno Platform 仅在访问资源时才延迟初始化 ResourceDictionary 中的某些资源。这是作为性能优化完成的。
为了保证在所有平台上始终调用构造ViewModelLocator
函数,最好从代码中调用它,例如从.App
App.xaml.cs
推荐阅读
- asp.net - 带有 Serilog 程序集的 .NET Standard 2.0 项目的问题
- go - 如何从 HELM 模板除法操作中获得浮点结果?
- php - setTime Carbon 还影响其他变量
- python - 如何读取带有 NULL 和不同标题的 CSV?
- javascript - 插入父级后如何从 DocumentFragment 添加/删除子级?
- sql - 如何创建具有 HH:MM 格式的时间字段的表,其中 HH IN [00, 23] 和 MM IN [00, 59]?
- javascript - React 测试库 - 如何在状态中填充值以测试组件?
- java - 在java中使用具有自动调整大小的默认整数数组实现堆栈
- vulkan - vulkan:在主 CommandBuffer 中多次调用 vkCmdBindPipeline
- flutter - 无法无条件访问属性“xyz”,因为接收者可以为“null”