我有一些可重复使用的UserControls,在那些UserControls中,我想访问我在bootstrapper中注册的一些服务实例。
我无法进行构造函数注入,因为这些用户控件直接在xaml中使用,所以我尝试访问ServiceLocator.Current
但它引发了异常。
那么访问用户控件中的注册服务实例的最佳做法是什么,你无法进行构造函数注入,因为WPF希望无参数构造函数将它们加载到xaml中。
(顺便说一下,我正在使用UnityBootstrapper)
答案 0 :(得分:0)
您可以创建一个DependencyProperty IUnityContainer,并在xaml中为您的控件提供一个实例:
<local:MyControl UnityContainer="{Binding Container}"/>
现在您可以在MyControl中访问它。这会吗?
我的团队喜欢使用容器的静态引用,但我们只允许在转换器中使用它。也许在这种情况下你也可以使用它:
<local:MyControl UnityContainer="{UnityContainer}"/>
这是使此选项有效所需的:
public static class MarkupExtensionHost
{
public static IUnityContainer Container { get; set; }
}
public class UnityContainerExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return MarkupExtensionHost.Container;
}
}