我是MEF的新手,並正在嘗試使用ExportFactory。我可以使用ExportFactory根據用戶插入對象創建一個列表嗎?示例將與以下所示內容類似。我可能不理解使用ExportFactory,因爲在運行期間,我在組合過程中遇到下面顯示的錯誤。你好如何使用ExportFactory <T>
1)沒有有效的出口找到匹配的約束 「((exportDefinition.ContractName == 「System.ComponentModel.Composition.ExportFactory(CommonLibrary.IFoo)」) AndAlso(exportDefinition.Metadata.ContainsKey即(「ExportTypeIdentity」) AndAlso 「System.ComponentModel.Composition.ExportFactory(CommonLibrary.IFoo)」。Equals(exportDefinition.Metadata.get_Item(「ExportTypeIdentity」))))', 無效導出可能已被拒絕。
class Program
{
static void Main(string[] args)
{
Test mytest = new Test();
}
}
public class Test : IPartImportsSatisfiedNotification
{
[Import]
private ExportFactory<IFoo> FooFactory { get; set; }
public Test()
{
CompositionInitializer.SatisfyImports(this);
CreateComponent("Amp");
CreateComponent("Passive");
}
public void OnImportsSatisfied()
{
int i = 0;
}
public void CreateComponent(string name)
{
var componentExport = FooFactory.CreateExport();
var comp = componentExport.Value;
}
}
public interface IFoo
{
double Name { get; set; }
}
[ExportMetadata("CompType", "Foo1")]
[Export(typeof(IFoo))]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.NonShared)]
public class Foo1 : IFoo
{
public double Name { get; set; }
public Foo1()
{
}
}
[ExportMetadata("CompType", "Foo2")]
[Export(typeof(IFoo))]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.NonShared)]
public class Foo2 : IFoo
{
public double Name { get; set; }
public Foo2()
{
}
}
您實際上並未在您的測試中顯示導入c因此很難說出他們有什麼問題。請編輯你的問題。 – 2012-07-15 05:21:02
我剛剛編輯以前的源,現在顯示導入 – user1522446 2012-07-17 13:21:54