我必须将一个对象实例注册到容器中。我无法使用通用 ComposeExportedValue<T>
因为我不知道编译时 T 是什么。
我需要的方法是这样的:container.RegisterInstance(Type someType, object instance)
有什么想法吗?
最佳答案
这是一个非通用的 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);
}
关于.net - 使用 MEF 注册实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843078/