Запуск MEF на моно - PullRequest
       35

Запуск MEF на моно

2 голосов
/ 09 июня 2011

Я пытался скомпилировать код 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?

Какую справочную библиотеку мне нужно дать, чтобы удалить это сообщение об ошибке?

ДОБАВЛЕНО

dmcs ex.cs /r:System.ComponentModel.Composition.dll работает.Не нужно скачивать dll из codeplex.

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Вопрос о том, включен ли MEF в Mono, это не проблема, я думаю ... но вам нужна библиотека MEF (не входит в библиотеки Mono).Загрузите библиотеку из Codeplex .Тогда ссылаться на это из вашего проекта.Если это сработает, тогда Mono может хорошо с этим поиграть.

1 голос
/ 09 июня 2011

Насколько я понимаю, MEF в настоящее время не является частью Mono.Mono имеет «похожую» конструкцию с AddIn, но она не идентична MEF.В настоящее время создание MEF в Mono будет означать, что вы можете использовать свою собственную, если только у меня нет какой-то новой магии, в которой я упускаю.

...