C# 将Unity容器传递给WPF转换器类

C# 将Unity容器传递给WPF转换器类,c#,wpf,converter,unity-container,C#,Wpf,Converter,Unity Container,我是WPF的新手 我想知道如何将我的IUnityContainer类注入到只有XAML代码的ViewModel中 小更新: 有一个名为LiveVideoTileControl的类-我已将容器添加到该类中 我的windows有一个特定的转换器: <UserControl x:Class="Driver.Test.Views.LiveVideoTileControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pr

我是WPF的新手

我想知道如何将我的IUnityContainer类注入到只有XAML代码的ViewModel中

小更新:
有一个名为LiveVideoTileControl的类-我已将容器添加到该类中

我的windows有一个特定的转换器:

<UserControl x:Class="Driver.Test.Views.LiveVideoTileControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:ViewModels="clr-namespace:Driver.Test.ViewModel"
         xmlns:Driver="clr-namespace:Driver.Test.DriverRelated"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300" >
    <UserControl.Resources>
        <Driver:CameraToMediaElementConverter x:Key="converter"/>
    </UserControl.Resources>
    <ScrollViewer>
    <Grid>
            <ContentControl Content="{Binding  CameraEntity,Converter={StaticResource converter}}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
        </ContentControl>
    </Grid>
    </ScrollViewer>
</UserControl>

如果有人不知何故来到这里,仍然在寻找答案,这就是我在应用程序中所做的,它工作得很好。converter类的限制是,您不能通过构造函数传递对unity容器实例的引用来注入服务

在启动时在Bootstrapper类或任何其他地方注册服务(这里是Prism的Bootstrapper ConfigureContainer的一部分):

在转换器类中:

        UnityContainer unityContainer = (UnityContainer)Application.Current.Resources["IoC"];
现在,您可以轻松地从Unity容器解析对象的任何实例:

service = (MyService) unityContainer.Resolve<MyService>();
service=(MyService)unityContainer.Resolve();

您必须手动执行(FactoryPattern或您喜欢的任何操作)-本文:介绍如何使用纯XAML(但仍然是手动)向属性中注入参数。我想我可以将我的2个参数包装成1,并将其作为对象发送给转换(object wrapperObj)。。不是在Convert(…)中发送1个对象,而是不-这会使您的代码不可读-您看过我链接的文章了吗?设置XAML中的
转换器的属性似乎是一个不错的选择。本文讨论的是将其注入ViewModel,而不是我在视图模型中使用的静态转换器类。这种情况下的区别在哪里?一个声明为DataContext,另一个声明为Resource感谢这是一个很好的解决方案,但是在以这种方式解析UnityContainer时,我不得不稍微修改一下代码:
UnityContainerExtension UnityContainer=(UnityContainerExtension)Application.Current.Resources[“IoC”]解析服务时也是这样:
var service=(IMyService)unityContainer.Resolve(typeof(IMyService))
            Application.Current.Resources.Add("IoC", this.Container);
        UnityContainer unityContainer = (UnityContainer)Application.Current.Resources["IoC"];
service = (MyService) unityContainer.Resolve<MyService>();