棱镜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

回到顶部