首页 / C# / c# – 无法尝试学习MEF
c# – 无法尝试学习MEF
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 无法尝试学习MEF,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2561字,纯文字阅读大概需要4分钟。
内容图文
从本教程开始,我一直在尝试自学MEF:
与现在的MEF工作方式相比,它与本教程中的工作方式有所不同.一个区别是CompositionBatch对象;但是,我想我理解所做的改变.
但是,我似乎无法理解的一个区别是,虽然教程说我应该能够通过更改属性的返回类型来处理0/1 /多个导入,但我无法在实践中完成这项工作.下面我将粘贴给我错误的代码;任何人都可以告诉我为什么这不起作用,我应该做什么呢?
我最终将使用MEF创建一个基于插件的应用程序,它将在运行时添加不同的功能,方法是将实现某个接口的不同.dll文件放入目录中.我想我会使用DirectoryCatalog,但我认为我需要先了解这个障碍.
namespace MessinWithMef
{
class Program
{
[Import]
public IEnumerable<string> Message { get; set; }
public void Run()
{
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var batch = new CompositionBatch();
batch.AddPart(this);
var container = new CompositionContainer(catalog);
container.Compose(batch);
foreach (var s in Message)
{
Console.WriteLine(s);
}
Console.ReadKey();
}
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
}
public class SimpleHello
{
[Export]
public string Message
{
get
{
return "Hello world!";
}
}
}
public class ExtraHello
{
[Export]
public string OtherMessage
{
get
{
return "Hi there!";
}
}
}
}
这是错误的文本:
The composition remains unchanged. The changes were rejected because of the following error(s): The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information.
1) No valid exports were found that match the constraint '((exportDefinition.ContractName == "System.Collections.Generic.IEnumerable(System.String)") AndAlso (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") AndAlso "System.Collections.Generic.IEnumerable(System.String)".Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))', invalid exports may have been rejected.
Resulting in: Cannot set import 'MessinWithMef.Program.Message (ContractName="System.Collections.Generic.IEnumerable(System.String)")' on part 'MessinWithMef.Program'.
Element: MessinWithMef.Program.Message (ContractName="System.Collections.Generic.IEnumerable(System.String)") --> MessinWithMef.Program
解决方法:
如果要解析多个匹配的导出,则必须使用[ImportMany].
请注意,在插件类型的场景中,您可能希望使用ExportMetadata,然后决定实际要实例化哪些插件.然后你会做类似的事情:
[ImportMany]
IEnumerable<Lazy<IPlugin, IPluginMetadata>> _possiblePlugins;
现在,您的代码可以枚举可能的插件,检查元数据,然后决定是否实例化每个Lazy导入.
内容总结
以上是互联网集市为您收集整理的c# – 无法尝试学习MEF全部内容,希望文章能够帮你解决c# – 无法尝试学习MEF所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。