2014-01-16 4 views
1

Я работаю с MEF и WebAPI (Self-hosting), и я заметил странное поведение, которое я не могу понять.MEF/WebAPI Странное поведение

Этот интерфейс/класс находится в отдельной сборке библиотеки классов.

public interface IQueryEngine 
{ 
    IEnumerable<T> Get<T>(); 
} 

[Export("QueryEngine" ,typeof(IQueryEngine))] 
public class QueryEngine : IQueryEngine 
{ 
    public IEnumerable<T> Get<T>() 
    { 
     // T is object instead of ManagedElementDTO - ? 
     return new ManagedElementDTO(); 
    } 
} 

Этот контроллер в проекте WebAPI:

[Export] 
public class ComputerSystemController : ApiController 
{ 
    [Import("QueryEngine", RequiredCreationPolicy = CreationPolicy.Shared)] 
    private IQueryEngine _engine; 

    // GET api/ComputerSystem 
    public IEnumerable<ManagedElementDTO> GetComputerSystems() 
    { 
     var result = _engine.Get<ManagedElementDTO>(); 

     return null; 
    } 
} 

Оба проекта имеют ссылки на библиотеки классов, содержащей ManagedElementDTO.

При вызове QueryEngine.Get() параметры типового типа являются «объектом» вместо "ManagedElementDTO". Можете ли вы сказать мне, почему это происходит? Что я могу сделать?

+1

Вы уверены, что _engine.Get верен? Он не должен компилироваться. –

ответ

0

Как подразумевалось, ваш синтаксис кажется неправильным. Я не разработчик C#, но я полагаю, ваш призыв к Get должен выглядеть следующим образом:

var result = _engine.Get<ManagedElementDTO>(); 

Т object, потому что тип не будучи явно прошел, и ничего, кроме object не может быть выведено.

+0

Да, вы правы, я исправил опечатку. Я получаю «объект», когда параметр типа передается. – joek1975