我必须将一个对象实例注册到一个容器中。我不能使用泛型ComposeExportedValue<T>
因为我不知道T在编译时是什么。
我需要的方法是这样的:container.RegisterInstance(Type someType,object instance)
有什么想法吗?
答案 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);
}