【发布时间】:2011-09-09 11:40:12
【问题描述】:
在Funq 和可能大多数其他 IoC 容器中,我可以简单地执行此操作来配置类型:
container.Register<ISomeThing>(c => new SomeThing());
如何在不使用属性的情况下快速扩展 MEF(或使用现有的 MEF 功能)来做同样的事情。
这是我认为我可以做到的:
var container = new CompositionContainer();
var batch = new CompositionBatch();
batch.AddExport<ISomeThing>(() => new SomeThing());
batch.AddExportedValue(batch);
container.Compose(batch);
使用CompositionBatch的这种扩展方法:
public static ComposablePart AddExport<TKey>(this CompositionBatch batch, Func<object> func)
{
var typeString = typeof(TKey).ToString();
return batch.AddExport(
new Export(
new ExportDefinition(
typeString,
new Dictionary<string, object>() { { "ExportTypeIdentity", typeString } }),
func));
}
如果我以后这样做:
var a = container.GetExport<ISomeThing>().Value;
var b = container.GetExport<ISomeThing>().Value;
两个实例是相同的。如何强制(配置)它们为不同的实例?
如果这不是要走的路,我将如何在 MEF 中做到这一点?
【问题讨论】:
标签: ioc-container mef func