注入您的IoC容器?

Rya*_*ice 6 dependencies inversion-of-control code-injection

我整个上午一直在研究寻找访问IoC的最佳实践.在将构造函数注入添加到类之后,您仍然需要从可能位于应用程序对象图深处的类中访问contianer.在我的情况下,我在WPF中做MVVM,我的一些View Models需要创建其他View Models,他们会使用容器来做到这一点.但问题是他们从何处获取容器.注入并传递它是否有意义?是否可以使其成为可注射的单身人士?供应单身人士的工厂更适合吗?

选项和权衡是什么?

更新

我发现Matt Hinze的这篇很棒的演讲涵盖了很多IoC理由:http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/04/08/inversion-of-control-in-action-by-matt- hinze-north.aspx

看起来一个答案是使用扫描功能并将IoC配置存储在每个程序集中的注册表中,然后在扫描期间将添加这些注册表配置.

还有其他方法需要考虑吗?特别是考虑到Matt演示了使用ServiceLocator模式,而Mark Seeman称之为反模式.请注意,Matt警告不要过度使用该模式,并且Mark对服务定位器的定义(http://blog.ploeh.dk/Trackback.aspx?guid=5f05c086-295b-41e5-a50a-ed0cd77ac4bd)似乎与Matt演示的不同.

lbe*_*ehr 2

正如您所说,您可以将工厂注入到顶级 ViewModel 中,而不是注入实际的 ViewModel 实例(这会很困难)。这有点像服务定位器模式,期望工厂(或服务提供商,或者你拥有的东西)能够更具体地提供他们可以提供的服务。