在单声道上运行MEF

时间:2011-06-08 21:30:01

标签: mono reference mef

我尝试编译从this page复制的MEF代码。

using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Reflection;
using System;

public class Program
{
[Import]
public IMessageSender MessageSender { get; set; }

public static void Main(string[] args)
{
 Program p = new Program();
 p.Run();
}

public void Run()
{
 Compose();
 MessageSender.Send("Message Sent");
}

private void Compose()
{
 AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
 var container = new CompositionContainer(catalog);
 container.ComposeParts(this);
}
}

public interface IMessageSender
{
void Send(string message);
}

[Export(typeof(IMessageSender))]
public class EmailSender : IMessageSender
{
public void Send(string message)
{
 Console.WriteLine(message);
}
}

当我运行此命令dmcs example.cs时,收到此错误消息。

ex.cs(1,29): error CS0234: The type or namespace name `Composition' does not exist in the namespace `System.ComponentModel'. Are you missing an assembly reference?

我需要提供哪些参考库才能删除此错误消息?

ADDED

dmcs ex.cs /r:System.ComponentModel.Composition.dll有效。一个人不必从codeplex下载dll。

2 个答案:

答案 0 :(得分:2)

MEF是否包含在Mono中不是问题,我认为......但是您需要MEF库(不包含在Mono库中)。从Codeplex下载库。然后从您的项目中引用它。如果有效,那么Mono可能会很好玩。

答案 1 :(得分:1)

根据我的理解,MEF目前不是Mono的一部分。 Mono与AddIn有一个“相似”的构造,但它与MEF不同。在这个时候,在Mono中创建MEF意味着要自己动手,除非我错过了一些新的魔法。