gpt4 book ai didi

mvvm - Caliburn.Micro + Unity 2.1 + MVVM : example code

转载 作者:行者123 更新时间:2023-12-03 10:29:05 25 4
gpt4 key购买 nike

我正在尝试在 WPF MVVM 应用程序中实现 Unity,但我错过了大局。

此刻,我创建了一个像这样的 Bootstrap :

  public class MainBootstrapper : Bootstrapper<MainViewModel>
{
private UnityContainer container;

protected override void Configure()
{
container = new UnityContainer();
container.RegisterType<IServiceLocator, UnityServiceLocator>(new ContainerControlledLifetimeManager());
container.RegisterType<IWindowManager, WindowManager>(new ContainerControlledLifetimeManager());
container.RegisterType<IEventAggregator, EventAggregator>(new ContainerControlledLifetimeManager());
}

protected override object GetInstance(Type service, string key)
{
if (service != null)
{
return container.Resolve(service);
}

if (!string.IsNullOrWhiteSpace(key))
{
return container.Resolve(Type.GetType(key));
}

return null;
}

protected override IEnumerable<object> GetAllInstances(Type service)
{
return container.ResolveAll(service);
}

protected override void BuildUp(object instance)
{
container.BuildUp(instance);
}
}

如何使用它的最佳方法是什么?
此代码当前有效:
  public class MainViewModel : PropertyChangedBase
{
public MainViewModel()
{ }

[Dependency]
public Sub1ViewModel Sub1VM { get; set; }
[Dependency]
public Sub2ViewModel Sub2VM { get; set; }
}

MainView 有这个:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>

<ContentControl Grid.Row="0" Name="Sub1VM" />
<ContentControl Grid.Row="1" Name="Sub2VM" />

</Grid>

首先:我分享的代码,这是使用Unity + Caliburn的正确方法吗?

现在假设我的 Sub1VM 使用模型“M1”,但 Sub2VM 需要使用相同的模型来显示信息,而不是通过创建模型 M1 的另一个实例。 (单件)

这现在如何运作?显示我在每个 View 模型构造函数中使用 IServiceLocator 吗?有人可以分享一个代码示例来解释它吗?

最佳答案

首先,我同意 McDonnellDean 的观点,即您应该阅读有关屏幕、导体和构图的文章(如果我是您,我也会阅读之前的所有文章以了解 Caliburn.Micro 的工作原理。)。除此之外,您正确实现了 Unity,您可以查看 Unity as IoC Container for Caliburn.Micro了解更多信息。另一方面,您在这里混合了两个概念,即依赖注入(inject)和 MVVM。关于您关于模型的问题,我也更喜欢构造函数注入(inject),如果您想要模型的单个实例,也许您可​​以注入(inject) Factory它为您创建该模型并将其包装到两个不同的 View 模型中,并通过两个不同的属性公开它。最后我真的鼓励你阅读 教程(start here),至少是基本主题。

关于mvvm - Caliburn.Micro + Unity 2.1 + MVVM : example code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com