.NET で動作する非常に単純な MEF サンプルを作成しましたが、Mono では正しく動作しません。
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.Composition;
namespace Vialis
{
class Program
{
[Import(typeof(ILedController))]
public List<ILedController> Controllers
{
get;
set;
}
static void Main(string[] args)
{
new Program();
}
public Program()
{
compose();
selectController();
Console.ReadLine();
}
private void compose()
{
var catalog = new DirectoryPartCatalog("controllers");
var container = new CompositionContainer(catalog);
container.AddPart(this);
container.Compose();
}
private void selectController()
{
Console.Clear();
Console.WriteLine("Please select the controller to use\n");
byte i = 0;
foreach (var controller in Controllers)
{
Console.WriteLine("\t{0}) {1}", i, controller.ToString());
i++;
}
Console.Write("\nYour selection: ");
var input = Convert.ToInt32(Console.ReadLine());
Controllers[input].DisplayText(10, 10, "Hello World");
}
}
}
これはインターフェースです:
using System;
using System.Collections.Generic;
using System.Text;
namespace Vialis
{
public interface ILedController
{
void DisplayText(int x, int y, string text);
}
}
これは最初の実装です:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.Composition;
namespace Vialis
{
[Export(typeof(ILedController))]
public class LyanController : ILedController
{
public void DisplayText(int x, int y, string text)
{
Console.SetCursorPosition(x, y);
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(text);
}
}
}
2 番目の実装:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.Composition;
namespace Vialis
{
[Export(typeof(ILedController))]
public class VialisController : ILedController
{
public void DisplayText(int x, int y, string text)
{
Console.SetCursorPosition(x, y);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(text);
}
}
}
.NET (Windows) では次のようになります。
コントローラーの選択:
しかし、Mono 2.2 を使用すると、アセンブリが読み込まれません。
助言がありますか ?
情報: Google の picasa ウェブに問題があるようです。そのため、画像が読み込まれません。
写真は、Mac OS ではコントローラがリストされていないことを示しています。