使用 UnityContainer 通过代码隐藏将依赖项注入视图

发布于 2025-01-06 21:09:29 字数 382 浏览 0 评论 0原文

我有一个 Silverlight 应用程序,其中只有少数控件使用 MVVM。我没有太多时间将所有控件移至 mvvm,但我需要向该控件注入一些服务。

因为某些控件是通过在 XAML 中声明它们来创建的,例如:

<UserControl>
<Grid>
<MyControlWithoutMVVM/>
</Grid>
</UserControl>

我看不到使用构造函数注入来注入依赖项的选项。

但也许我错了,这就是我发布这个问题的原因。

有什么解决办法吗?

我的 CompositionRoot 位于 App 类的 ApplicationStartup 方法中。

I have a Silverlight application, where only few controls use MVVM. I haven't much time to moved all controls to mvvm, but I need inject some services into that controls.

Because some controls are being created by declaring them in XAML like:

<UserControl>
<Grid>
<MyControlWithoutMVVM/>
</Grid>
</UserControl>

I can't see an option to inject dependency using Constructor Injection.

But maybe I'm wrong and this is why I'm posting that question.

Is there any solution to do that?

My CompositionRoot is in ApplicationStartup methon on the App class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜血缘 2025-01-13 21:09:29

如果将元素放入 XAML 代码中,则无法使用构造函数注入,因为您无法控制这些对象的实例化。

您可以从 XAML 中删除元素创建,并查看

  • Caliburn.Micro 允许您基于您的视图模型并为您创建视图(首先是视图模型),或者它可以让您使用 UI 并解析视图模型(首先是视图)。

  • PRISM 允许您组合 UI 并将元素放入区域,同时使您能够使用 DI 创建对象。

或者您可以放弃 DI 并切换到类似 ServiceLocator 的方法(我不推荐这种方法< /a>)。

If you put elements in your XAML code there is no way you can use constructor injection because you don't control the instantiation of these objects.

You can either remove the elements creation from the XAML and have a look at

  • Caliburn.Micro allows you to work based on your viewmodels and creates the views for you (viewmodel first) or it lets you work with your UI and resolves the viewmodels (view first).

or

  • PRISM allows you to compose your UI and put elements in regions while enabling you to create objects using DI.

or you can drop DI and switch to a ServiceLocator-like approach (which I cannot recommend).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文