You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BoDi容器无法解析ITestInterface<BaseInfo>接口问题求助

BoDi容器无法解析泛型接口依赖问题

错误信息

BoDi.ObjectContainerException : 无法解析接口: Test.Helpers.IMDSInterface`1[[Test.Info.BaseInfo, Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] (解析路径: Test.StepDefinitions)

代码结构

BaseInfo.cs

public abstract class BaseInfo
{
    public abstract string GetMessage();
}

ConcreteA.cs

public class ConcreteA : BaseInfo
{
    public override string GetMessage()
    {
        return "ConcreteA";
    }
}

public class ConcreteB : BaseInfo
{
    public override string GetMessage()
    {
        return "ConcreteB";
    }
}

ITestInterface.cs

public interface ITestInterface<out T>
{
    IEnumerable<T> Translate(Table info);
}

ClassA.cs

public class ClassA : ITestInterface<ConcreteA>
{
    public Type InterfaceType => typeof(ConcreteA);

    public IEnumerable<ConcreteA> Translate(Table info)
    {
        return info.CreateSet<ConcreteA>(new InstanceCreationOptions { VerifyAllColumnsBound = true });
    }
}

ClassB.cs

public class ClassB : ITestInterface<ConcreteB>
{
    public Type InterfaceType => typeof(ConcreteB);

    public IEnumerable<ConcreteB> Translate(Table info)
    {
        return info.CreateSet<ConcreteB>(new InstanceCreationOptions { VerifyAllColumnsBound = true });
    }
}

Hooks.cs

[Binding]
public sealed class Hooks
{
    public readonly IObjectContainer _objectContainer;

    public Hooks(IObjectContainer objectContainer)
    {
        _objectContainer = objectContainer;

        ConfigureA();
    }

    [BeforeScenario("forA", Order = 1)]
    public void ConfigureA()
    {
        _objectContainer.RegisterTypeAs<ClassA, ITestInterface<ConcreteA>>();
        
    }

    [BeforeScenario("forB", Order = 1)]
    public void ConfigureB()
    {
        _objectContainer.RegisterTypeAs<ClassB, ITestInterface<ConcreteB>>();
    }
}

StepsDefinitions.cs

namespace Test
{
  [Binding]
  public class StepDefinitions
  {
      private readonly ITestInterface<BaseInfo> _mdsClassA;
     
      public StepDefinitions(ITestInterface<BaseInfo> mdsClassA)
      {
          _mdsClassA = mdsClassA;
      }
  }
}

已尝试操作

我已使用IsRegistered<..>方法检查接口注册状态,但问题仍未解决,恳请帮忙排查。


内容的提问来源于stack exchange,提问作者Eric Bosch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:42:25