【问题标题】:MEF/WebAPI Strange BehaviorMEF/WebAPI 奇怪的行为
【发布时间】:2014-01-16 19:27:11
【问题描述】:

我正在使用 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"。你能告诉我为什么会这样吗?我能做什么?

【问题讨论】:

  • 您确定 _engine.Get 是正确的吗?它不应该编译。

标签: c# asp.net-web-api mef self-hosting


【解决方案1】:

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

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

T 是 object,因为没有显式传递任何类型,只能推断出 object

【讨论】:

  • 是的,你是对的,我纠正了错字。传入类型参数时,我得到“对象”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2015-07-20
  • 2010-10-03
  • 2021-07-12
  • 2013-10-04
相关资源
最近更新 更多