Dependency injection 如何使用MEF初始化一组类?

Dependency injection 如何使用MEF初始化一组类?,dependency-injection,prism,mef,Dependency Injection,Prism,Mef,我在我的应用程序中使用prism/mvvm/mef,加载标有ViewExport(Region)的所有视图效果很好(我使用的是StockTraderRI AutoPopulateExportedViewsBehaviour) 现在我想使用这个运行时查找功能来初始化其他一些后台类 假设我有一个接口 public interface ITable { } 我从这个接口得到了很多类 有没有办法标记这些派生类,让MEF在运行时创建它们,并将它们添加到某种列表或容器中 就像进入一个没有显示的区域,我想是

我在我的应用程序中使用prism/mvvm/mef,加载标有ViewExport(Region)的所有视图效果很好(我使用的是StockTraderRI AutoPopulateExportedViewsBehaviour)

现在我想使用这个运行时查找功能来初始化其他一些后台类

假设我有一个接口

public interface ITable
{
}
我从这个接口得到了很多类

有没有办法标记这些派生类,让MEF在运行时创建它们,并将它们添加到某种列表或容器中

就像进入一个没有显示的区域,我想是吧?我如何在MEF中实现这一点?

当然有! 使用Export属性标记继承接口的类,并在另一个类中使用attribute[ImportMany]创建泛型类型ObservableCollection的属性。应该有人能做到。

当然有!
使用Export属性标记继承接口的类,并在另一个类中使用attribute[ImportMany]创建泛型类型ObservableCollection的属性。应该这样做。

如果您使用MEF而不是Unity,您还可以在引导程序中使用容器调用:

var tables = Container.GetExportedValues<ITable>();
var tables=Container.GetExportedValues();

容器是MefBootTrapper的公共财产

如果使用MEF代替Unity,还可以在引导程序中使用容器调用:

var tables = Container.GetExportedValues<ITable>();
var tables=Container.GetExportedValues();

容器是MefBootTrapper的公共财产

就这些?但MEF如何知道哪些东西属于哪个集合?按泛型类型?是的,实际上您的不同类将用[Export(typeof(ITable))]修饰,MEF将查找继承或对应于泛型类型的任何类以满足您的集合,创建实例并将它们添加到集合中。仅此而已?但MEF如何知道哪些东西属于哪个集合?通过泛型类型?是的,实际上您的不同类将被[Export(typeof(ITable))]修饰,MEF将寻找继承或对应于泛型类型的任何类以满足您的集合,创建实例并将它们添加到集合中。它是替代依赖项注入容器。不过,MEF是我的首选。它是替代依赖项注入容器。不过,MEF是我的首选。