2010-05-16 100 views
4

我必須將一個對象實例註冊到容器中。我不能使用通用的ComposeExportedValue<T>,因爲我不知道在編譯時T是什麼。向MEF註冊實例

我需要的方法是這樣的:container.RegisterInstance(類型SOMETYPE,對象實例)

任何想法?

回答

2

這裏的ComposeExportedValue的一個版本,是不是通用的:

public static void ComposeExportedValue(this CompositionContainer container, string contractName, object exportedValue) { 
    if (container == null) 
     throw new ArgumentNullException("container"); 
    if (exportedValue == null) 
     throw new ArgumentNullException("exportedValue"); 
    CompositionBatch batch = new CompositionBatch(); 
    var metadata = new Dictionary<string, object> { 
     { "ExportTypeIdentity", AttributedModelServices.GetTypeIdentity(exportedValue.GetType()) } 
    }; 
    batch.AddExport(new Export(contractName, metadata,() => exportedValue)); 
    container.Compose(batch); 
} 

public static void ComposeExportedValue(this CompositionContainer container, object exportedValue) { 
    if (container == null) 
     throw new ArgumentNullException("container"); 
    if (exportedValue == null) 
     throw new ArgumentNullException("exportedValue"); 
    ComposeExportedValue(container, AttributedModelServices.GetContractName(exportedValue.GetType(), exportedValue); 
} 
+0

你確定這個工程?我知道容器 - >組成參數名稱不匹配,除此之外,代碼仍然不起作用。 – yang 2010-05-16 09:51:07

+0

好吧,我的錯。更正合同名稱可解決問題。非常感謝! – yang 2010-05-16 09:52:45