2014-01-16 41 views
1

我正在使用MEF和WebAPI(自託管),並且我注意到了一些我無法弄清楚的奇怪行爲。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

正如Panos暗示的那樣,你的語法似乎是錯誤的。我不是一個C#開發,但我相信你對Get通話應該是這樣的:

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

T是object因爲沒有類型被顯式傳遞,並沒有什麼,但object可以推斷。

+0

是的,你是對的,我糾正了錯字。當傳入類型參數時,我得到「對象」。 – joek1975