【问题标题】:Castle Windsor: Can a Typed Factory Facility pass a parameter down to one of the type's dependencies?Castle Windsor:类型化工厂设施可以将参数向下传递给类型的依赖项之一吗?
【发布时间】:2013-03-04 17:58:09
【问题描述】:

我对构造函数有这样的看法:

MyView(MyViewModel viewModel)

以及具有如下构造函数的视图模型:

MyViewModel(RuntimeParameter runtimeParam, <design-time resolvable parameters>)

我想使用 Castle Windsor 的 Typed Factory Facility 功能创建一个视图工厂,以便我可以通过调用来创建视图

MyView view = factory.Create(runtimeParam);

我已经能够使用 Castle Windsor 文档 here 创建 ViewModel 工厂,但我无法让 View Factory 工作。传递给 View 工厂的运行时参数需要传递给 ViewModel。有没有办法告诉温莎这样做?

我想我可以使用两个工厂——一个用于视图,一个用于视图模型,但这看起来很难看...

【问题讨论】:

  • 你好 Jana, 通常我倾向于只对视图使用默认构造函数。看来您正在使用构造函数来绑定视图和视图模型。如果您使用的是 WPF/Silverlight,您可能需要考虑为此使用 Caliburn.Micro(或其他库)。对我来说,这大大简化了设计。
  • 是的,我正在使用构造函数来绑定 View 和 ViewModel。我还没有决定一个 MVVM 框架,我将把它推迟几个星期,同时我想知道我能从 Windsor 中得到什么。但是感谢您提醒我,我不必用一个框架解决所有问题! :)

标签: c# castle-windsor typed-factory-facility


【解决方案1】:

不可能以您尝试的方式通过多层类型化工厂传递参数。我认为你最好的选择是让你的 View 依赖于你的 ViewModel 类型化工厂,并在其构造函数中从工厂请求 ViewModel(如果你愿意,可以从另一个类型化工厂调用 Views)。

作为替代方案,请考虑您的 ViewModel 是否真的需要通过类型化工厂来解析。可以从在容器中注册的某些服务中获取该 RuntimeParameter 吗?一般来说,如果我能找到一种使“默认”行为起作用的方法,我会尽量避免使用类型工厂。

【讨论】:

  • 谢谢斯图尔特。关于使“默认”工作,您有一个很好的观点。我现在将使用一对基于接口的工厂,因为它还处于早期阶段,而我现在正在处理的视图将无法从服务中获取此参数,所以我无法绕过工厂这种情况(...除了可能使用 MVVM 框架...)。但我可以看到管道中的其他一些视图从服务中获取会更好,所以我会尽可能远离类型化工厂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多