.net – MEF 2中的“缺失依赖”异常
|
我正在研究MEF 2.下面的代码抛出异常:
调用SatisfyImports()方法时.为什么? using System;
using System.Collections.Generic;
using System.Composition;
using System.Composition.Hosting;
using System.Reflection;
namespace MEFStudy
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
[ImportMany]
private List<IMessageSender> MessageSenders { get; set; }
public void Run()
{
Compose();
foreach (IMessageSender sender in MessageSenders)
{
sender.Send();
}
}
private void Compose()
{
CompositionHost host = new ContainerConfiguration().WithAssembly(Assembly.GetExecutingAssembly()).CreateContainer();
host.SatisfyImports(this); // <=========== HERE
host.Dispose();
}
}
public interface IMessageSender
{
void Send();
}
[Export(typeof(IMessageSender))]
public class EmailSender1 : IMessageSender
{
public void Send()
{
Console.WriteLine("EmailSender1");
}
}
[Export(typeof(IMessageSender))]
public class EmailSender2 : IMessageSender
{
public void Send()
{
Console.WriteLine("EmailSender2");
}
}
}
更新1 根据here,有2个版本的MEF. >使用.NET Framework进行非便携式操作 列表< IMessageSender>方法适用于非便携式方法.但不是便携式的.这是一个错误吗? 我不小心改变了以下代码:[ImportMany]
private List<IMessageSender> MessageSenders { get; set; }
至 [ImportMany]
private IEnumerable<IMessageSender> MessageSenders { get; set; }
它解决了这个问题. 但是,为什么呢?不是List< T> IEnumerable< T> ? 加 甚至更奇怪,我将IEnumerable更改为IList,它的工作原理.为什么? 可能的解释 (我想与此分享我的解释.) 以下界面可以重现完全相同的错误. interface IMyList<T> : IList<T>
{
}
[System.Composition.ImportMany] // MEF 2
private IMyList<IMessageSender> MessageSenders { get; set; }
以下MEF 2来源显示了原因. 3 SupportedContactTypes的Equals()方法返回false,其中包含IMyList<>.所以在MEF2中不会返回IMyList<>的有效导出. 所以我们可以说,ImportMany属性只支持数组和3种支持的泛型类型. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
