MEF / WebAPI奇怪的行为

时间:2014-01-16 19:27:12

标签: c# asp.net-web-api mef 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()时,泛型类型参数是“object”而不是"ManagedElementDTO"。你能告诉我为什么会这样吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

正如Panos暗示的那样,你的语法似乎是错误的。我不是C#开发人员,但我相信您对Get的调用应如下所示:

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

T为object,因为没有明确传递任何类型,只能推断出object