我的应用程序正在使用MEF从外部程序集导出一些类。这些类已设置为构造函数注入。我遇到的问题是当我尝试访问它们时,MEF会尝试实例化这些类。是否有办法让Ninject处理类的实例化?
IEnumerable<Lazy<IMyInterface>> controllers =
mefContainer.GetExports<IMyInterface>();
// The following line throws an error because MEF is
// trying to instantiate a class that requires 5 parameters
IMyInterface firstClass = controllers.First().Value;
更新:
有多个类实现了IMyInterface
,我希望选择一个特定名称的类,然后让Ninject创建它的一个实例。我不确定自己是否需要惰性加载。
[Export(typeof(IMyInterface))]
public class MyClassOne : IMyInterface {
private MyRepository one;
private YourRepository two;
public MyClassTwo(MyRepository repoOne, YourRepository repoTwo) {
one = repoOne;
two = repoTwo;
}
}
[Export(typeof(IMyInterface))]
public class MyClassTwo : IMyInterface {
private MyRepository one;
private YourRepository two;
public MyClassTwo(MyRepository repoOne, YourRepository repoTwo) {
one = repoOne;
two = repoTwo;
}
}
使用 MEF,我想获取 MyClassOne
或 MyClassTwo
中的一个,然后让 Ninject 提供 MyRepository
和 YourRepository
的实例(注意,这两个在主程序集中的 Ninject 模块中绑定,而不是它们所在的程序集中)。