【发布时间】:2014-09-04 07:50:48
【问题描述】:
我正在学习 MEF 2。下面的代码抛出异常:
未处理的类型异常 'System.Composition.Hosting.CompositionFailedException' 发生在 System.Composition.TypedParts.dll
附加信息:缺少依赖项“MessageSenders” 'MEFStudy.Program'。
调用 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,MEF有2个版本。
- .NET Framework 随附的非便携式计算机
- 可在 NuGet 上使用的便携式计算机
List<IMessageSender> 方法适用于非便携式方法。但不是便携式的。这是一个错误吗?
【问题讨论】: