Я занимаюсь разработкой приложения с поддержкой MEF. Существует базовый проект библиотеки, который работает как клей и реализует:
CompositionContainer cc = new CompositionContainer(catalog);
cc.ComposeParts(this);
Я объявил все части [Import] в этой базовой библиотеке, такие как ниже:
[Import(typeof(IHost))]
// The imported host form
public IHost Host
{ get; set; }
[Import(typeof(ILightStudents<?>))]
public ILightStudents<?> StudentsAPI { get; set; }
Существует такая проблема при реализации IHost или других интерфейсов в других проектах библиотеки, которая имеет атрибут [export], но проблема здесь в том, что я объявил ILightStudents следующим образом:
public interface ILightStudents<T> where T:class
{
IEnumerable<T> Students();
T GetStudent(long id);
}
Но, как вы видели в предыдущем коде, я поставил '?' отметка в импортной части. Как вы знаете, цель универсальных методов состоит в том, что вы можете реализовать их любым классом или типом, который вам нужен. И здесь я хочу реализовать ILightStudents в другом проекте библиотеки с моим правильным типом, но я не могу оставить часть [import] без указания типа.
Не могли бы вы помочь мне, пожалуйста?
Отредактировано
Я почти мог решить проблему, используя динамическое связывание типов.