C#学习教程:在从XAML实例化的控件中使用MEFpublicclassMyUserControl:UserControl,IPartImportsSatisfiedNotification{[Import]publicIServiceService{get;放;}publicMyUserControl(){}publicvoidOnImportsSatisfied(){//用服务做点什么。这个UserControl是从XAML实例化的,所以它的导入不满足并且OnImportsSatisfied没有被调用。我的问题是在XAML中创建类时如何满足类的导入。来自MSDN:要在XAML中实例化为对象元素,自定义类必须满足以下要求:自定义类必须是公共的,并且必须公开默认(无参数)公共构造函数。(有关结构的说明,请参见下一节。)不能嵌套自定义类。全名路径中的额外“点”使类命名空间划分不清楚,并干扰其他XAML功能,例如附加属性。如果对象可以实例化为对象元素,则创建的对象可以使用任何以对象作为其基础类型的属性来填充属性元素形式。如果启用值转换器,仍然可以为不满足这些条件的类型提供对象值。有关详细信息,请参阅XAML的类型转换器和标记扩展。从那里,您有两个选择:1)使用TypeConverter:使用类型转换器将允许您在没有无参数构造函数的情况下实例化对象,但您必须提供将执行实例化的TypeConverter。现在,我从未使用过它,我无法进一步帮助您。2)使用ServiceLocator获取IService:publicclassMyUserControl:UserControl{publicIServiceService{get;放;}publicMyUserControl(){服务=Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance();//你已经可以在这里使用Service做一些事情了。我意识到这是你的类设计的一个变化,但希望你能处理它。希望这会有所帮助,鲍勃。如果您不希望mef创建您的用户控件,则必须在用户控件中使用compositioncontainer并直接调用GetExport。但是您在获取compositioncontainer的实例时遇到问题:)ps:我让我在我的应用程序中创建我的wpf视图。以上就是C#学习教程:在XAML实例化的控件中使用MEF分享的全部内容,如果对你有用,还需要进一步了解C#学习教程,希望大家多多关注——本文来自来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
