Мое приложение использует 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 в основной сборке, а не в сборке, в которой они находятся)