C# mef 根据 ContractName 获取对象
时间: 2024-10-20 20:11:09 浏览: 11
C# MEF Demo 使用例子,学会使用Mef
在C#的MEF(Managed Extensibility Framework)中,如果你想要根据`ContractName`(通常是接口名)动态地获取一个实现了该接口的对象,可以使用`CompositionContainer`的`GetExport`或`GetExports`方法。这里是一个简单的示例:
```csharp
// 创建CompositionContainer实例,它可以管理所有已注册的部件
var container = new CompositionContainer(containerCatalog);
// 定义你想查找的接口合同名称,比如 IMyService
string contractName = typeof(IMyService).FullName;
// 使用CompositionContainer获取指定接口的所有出口
IEnumerable<Export> exports = container.GetExports(contractName);
foreach (var export in exports)
{
// 确认export的实际类型是否实现了IMyService接口
var component = export.Value as IMyService;
// 如果找到了,使用它
if (component != null)
{
// ... 这里可以对component进行操作
component.DoSomething();
}
}
// 或者直接获取第一个匹配的出口
IMyService myService = container.GetExport<IMyService>(contractName).Value;
```
在这个例子中,`contractName`是你想要的对象所实现的接口的完全限定名。`GetExports`方法会返回所有满足条件的导出实例,而`GetExport<T>`则会返回单个实例。
阅读全文