編輯:馬特,這確實解決了我的一些(大部分)問題,謝謝。現在唯一的問題是我如何在WPF中執行此操作?我有一個基於定製的部分斷UserControl
的但在WPF沒辦法的事:MEF:無法在其他類中導入?
[Import]<my:SomeCustomControl>
所以級聯不會在這種情況下工作。
/編輯
我有一個問題[導入]在我的項目荷蘭國際集團各MEF組件。我是否必須在每個課堂上使用CompositionContainer?在下面的代碼中,在方法Helper.TimesTwo()中拋出了一個空引用異常,但是當我在Program類中調用logger.Log()時,一切正常。任何幫助將不勝感激。
(這將編譯並作爲控制檯應用程序運行)。
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var p = new Program();
p.Run();
}
[Import]
private ILog logger { get; set; }
public void Run()
{
var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
logger.Log("hello");
var h = new Helper();
logger.Log(h.TimesTwo(15).ToString());
Console.ReadKey();
}
}
class Helper
{
[Import]
private IDouble doubler { get; set; }
private Helper()
{
// do I have to do all the work with CompositionContainer here again?
}
public double TimesTwo(double d)
{
return doubler.DoubleIt(d);
}
}
interface ILog
{
void Log(string message);
}
[Export(typeof(ILog))]
class MyLog : ILog
{
public void Log(string message)
{
Console.WriteLine("mylog: " + message);
}
}
interface IDouble
{
double DoubleIt(double d);
}
[Export(typeof(IDouble))]
class MyDoubler : IDouble
{
public double DoubleIt(double d)
{
return d * 2.0;
}
}
}
我想知道你是否看過這個,Glenn,因爲你最近接連發布了關於MEF + WPF的推文。 :) – 2009-02-03 01:06:29