我创建了一个 UserControl,它使用[Import]
属性。
public class MyUserControl : UserControl, IPartImportsSatisfiedNotification
{
[Import]
public IService Service { get; set; }
public MyUserControl()
{
}
public void OnImportsSatisfied()
{
// Do something with Service.
}
}
此 UserControl 是从 XAML 实例化的,因此其导入未得到满足,并且OnImportsSatisfied
没有被调用。
<local:MyUserControl />
我的问题是,当在 XAML 中创建类时,如何满足类的导入。
来自 MSDN:
要在 XAML 中实例化为对象元素,自定义类必须
满足以下要求:
自定义类必须是公共的,并且必须公开默认(无参数)公共构造函数。 (请参阅以下部分的注释
关于结构。)
自定义类不能是嵌套类。全名路径中的额外“点”使类名称空间划分不明确,并且
干扰其他 XAML 功能,例如附加属性。
如果一个对象可以实例化为对象元素,则创建的对象
可以填写任何采用以下属性的属性元素形式
对象作为其基础类型。
您仍然可以提供对象值
对于不满足这些条件的类型,如果您启用一个值
转换器。有关详细信息,请参阅类型转换器和标记
XAML 的扩展。
从那里,你有两个选择:
1)使用类型转换器 http://msdn.microsoft.com/library/ee621339.aspx#type_converters:
使用类型转换器将允许您在没有无参数构造函数的情况下实例化对象,但您必须提供一个 TypeConverter 来执行实例化。
现在,我从来不需要使用它,我无法进一步帮助你。
2) 使用 ServiceLocator 检索 IService:
public class MyUserControl : UserControl
{
public IService Service { get; set; }
public MyUserControl()
{
Service = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IService>();
// You can do something with Service here already.
}
}
我意识到这是您班级设计的一个变化,但希望您能够应对它。
希望这可以帮助,
Bab.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)