棱镜WPF - 如何访问UserControls或自定义控件中的ServiceLocator
我有一些可重用的UserControls,在那些UserControls内我想访问一些服务实例,这些实例是我在bootstrapper中注册的。棱镜WPF - 如何访问UserControls或自定义控件中的ServiceLocator
我不能做构造函数注入,因为这些用户控件直接在xaml中使用,所以我试图访问ServiceLocator.Current
,但它抛出异常。
那么访问用户控件中的注册服务实例的最佳做法是什么?您不能执行构造函数注入,因为WPF需要无参数构造函数在xaml中加载它们。
(顺便说一句,我使用UnityBootstrapper)
回答:
您可以创建一个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;
}
}
以上是 棱镜WPF - 如何访问UserControls或自定义控件中的ServiceLocator 的全部内容, 来源链接: utcz.com/qa/262561.html