我正在使用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"
。你能告诉我为什么会这样吗?我该怎么办?
答案 0 :(得分:0)
正如Panos暗示的那样,你的语法似乎是错误的。我不是C#开发人员,但我相信您对Get
的调用应如下所示:
var result = _engine.Get<ManagedElementDTO>();
T为object
,因为没有明确传递任何类型,只能推断出object
。