使用MEF注册实例

时间:2010-05-16 08:40:58

标签: .net mef

我必须将一个对象实例注册到一个容器中。我不能使用泛型ComposeExportedValue<T>因为我不知道T在编译时是什么。

我需要的方法是这样的:container.RegisterInstance(Type someType,object instance)

有什么想法吗?

1 个答案:

答案 0 :(得分: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);
}