2010-05-16 62 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