【问题标题】:Uno Platform ViewModelLocatorUno 平台视图模型定位器
【发布时间】:2021-11-08 00:38:27
【问题描述】:

我正在测试 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 等其他类型的项目,定位器的构造函数永远不会被调用,但我没有错误,只是加载页面而没有后面的 viewmodel。

有什么想法或技巧使它适用于所有项目?

【问题讨论】:

    标签: autofac uno-platform viewmodellocator


    【解决方案1】:

    根据资源的类型,Uno Platform 仅在访问资源时才延迟初始化 ResourceDictionary 中的某些资源。这是作为性能优化完成的。

    为保证在所有平台上始终调用ViewModelLocator 构造函数,最好从代码中调用它,例如从App.xaml.cs 中的App 构造函数。

    【讨论】:

    • 感谢您的建议。我明白你的意思,但也从 App 定义定位器仍然无法按预期工作。似乎没有正确构建容器,然后在页面上没有检索到正确的视图模型
    • 任何错误或异常?
    • 没有。我会尽快尝试制作一个测试应用来发布和更新帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多